跳至主要內容

反转链表II之反转部分链表

Mr.He小于 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;
};