反转链表

36 阅读1分钟

92. 反转链表 II

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

 

示例 1:

输入: head = [1,2,3,4,5], left = 2, right = 4
输出: [1,4,3,2,5]

示例 2:

输入: head = [5], left = 1, right = 1
输出: [5]

 

提示:

  • 链表中节点数目为 n
  • 1 <= n <= 500
  • -500 <= Node.val <= 500
  • 1 <= left <= right <= n
/**
 * @param {ListNode} head
 * @param {number} left
 * @param {number} right
 * @return {ListNode}
 */
var reverseBetween = function(head, left, right) {
	let leftPre;
    let rightNext;
    let index = 1;
    let p = head;
    while (p) {
    	if (index === left - 1) {
    		leftPre = p;
    	}

    	if (index === left) {
    		let pre = null;
    		let cur = p;
    		while(index <= right) {
    			const next = cur.next;
    			cur.next = pre;
    			pre = cur;
    			cur = next;
    			index++;
    		}
    		if(index === right + 1) {
	    		rightNext = cur;
	    	}
	    	
	    	p.next = rightNext;
            if (leftPre) {
                leftPre.next  = pre;
            } else {
                head = pre;
            }
    	}
    	
    	index++;
    	p = p.next;
    }

    return head;
}