反转链表II之反转部分链表
小于 1 分钟
反转链表II之反转部分链表
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
代码实现
var reverseBetween = function (head, left, right) {
// 定义一个头结点
let emptyHead = new ListNode();
emptyHead.next = head;
// 找到left的前一个节点
let i = 1;
let beforeNode = emptyHead;
for (; i < left; i++) {
beforeNode = beforeNode.next;
}
let pre = null;
// left的下一个节点作为反转的开始
let cur = beforeNode.next;
let j = 1;
// 反转right-left次,pre最后指向了right节点,cur指向了right的下一个节点5
for (; j <= right - left + 1; j++) {
const next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
// 将left之前指向的下个节点 2 的next指向 cur所指向的5节点
beforeNode.next.next = cur;
// 将left之前的那个节点指向反转后的pre节点4
beforeNode.next = pre;
return emptyHead.next;
};