92. 反转链表 II
题目链接
一、思想
- 定义一个虚拟头节点,因为头节点也有可能发生改变。可以避免复杂的讨论。
- 利用虚拟头节点,确定各个位置的指针。
- 将left到right之间的节点断开,并且利用206.反转链表进行反转。
- 最后将整个链连接起来,注意连接的顺序。

二、代码实现
var reverseBetween = function(head, left, right) {
const dummyNode = new ListNode(-1);
dummyNode.next = head;
let pre = dummyNode;
for(let i=0;i<left-1;i++){
pre = pre.next;
}
let leftNode = pre.next;
let rightNode = pre;
for(let i=0;i<right-left+1;i++){
rightNode = rightNode.next;
}
let cur = rightNode.next;
pre.next = null;
rightNode.next = null;
var reverse = function(head){
let pre = null,cur = head;
while(cur){
let temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
}
reverse(leftNode);
pre.next = rightNode;
leftNode.next = cur;
return dummyNode.next;
};