来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-linked-list-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
解答
/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)* this.next = (next===undefined ? null : next)* }*//*** @param {ListNode} head* @param {number} left* @param {number} right* @return {ListNode}*/const reverseChain = (head) => {let prev = null;while (head) {const next = head.next;head.next = prev;prev = head;head = next;}}var reverseBetween = function(head, left, right) {const firstNode = new ListNode(null, head);let curNode = firstNode,leftStartNode = null,rightStartNode = null,leftLastNode = null,rightLastNode = null,idx = 0;while (curNode) {if ((idx + 1) === left) {leftStartNode = curNode?.next;leftLastNode = curNode;}if (idx === right) {rightStartNode = curNode;rightLastNode = curNode.next;if (leftStartNode !== null) {rightStartNode.next = null;reverseChain(leftStartNode);leftLastNode.next = rightStartNode;leftStartNode.next = rightLastNode;}}++idx;curNode = curNode.next;}return firstNode.next;};
