题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
function reverseBetween( head , m , n ) {
// write code here
if (m === n ) {
return head
}
let num = 0
let p1 = head
let startNode = null
let lastNode = null
let endNode = null
let nextNode = null
let left = null
while (p1) {
num++
if(num === m) {
startNode = p1
lastNode = left
if(num !== 1) {
left.next = null
}
}
if(num === n) {
endNode = p1
nextNode = p1.next
p1.next = null
}
left = p1
p1 = p1.next
}
//此时要反转startNode
let last = null
let p = startNode
while (p) {
let tem = p.next
p.next = last
last = p
p = tem
}
//反转之后
if(lastNode !== null) {
lastNode.next = endNode
}
startNode.next = nextNode
if (m === 1) {
return endNode
}
return head
}
module.exports = {
reverseBetween : reverseBetween
};
