classSolution { public ListNode reverseBetween(ListNode head, int left, int right) { ListNodedummyHead=newListNode(-1, head); ListNodeprev= dummyHead; for (inti= left - 1; i > 0; i--) { prev = prev.next; }
public ListNode reverseTheFirstNNodes(ListNode head, int n, SuccHolder succHolder) { if (n == 1) { succHolder.succ = head.next; return head; }
ListNodenewHead= reverseTheFirstNNodes(head.next, n - 1, succHolder); head.next.next = head; head.next = succHolder.succ; // 虽然中间节点的 next 指向了 succ, 但是会在后续递归回退的过程中被 head.next.next 修正 next 指向 return newHead; }
public ListNode reverseBetween(ListNode head, int left, int right) { ListNodedummyHead=newListNode(-1, head); ListNodeprev= dummyHead; for (inti= left - 1; i > 0; i--) { prev = prev.next; }
prev.next = reverseTheFirstNNodes(prev.next, right - left + 1, newSuccHolder()); return dummyHead.next; } }
public ListNode reverseTheFirstNNodes(ListNode head, int n, SuccHolder succHolder) { if (n == 1) { succHolder.succ = head.next; return head; }
ListNodenewHead= reverseTheFirstNNodes(head.next, n - 1, succHolder); head.next.next = head; head.next = succHolder.succ; // 虽然中间节点的 next 指向了 succ, 但是会在后续递归回退的过程中被 head.next.next 修正 next 指向 return newHead; }
public ListNode reverseBetween(ListNode head, int left, int right) { if (left == 1) { return reverseTheFirstNNodes(head, right - left + 1, newSuccHolder()); }
head.next = reverseBetween(head.next, left - 1, right - 1); return head; } }