92. Reverse Linked List II
# Medium
Key idea: record pre-node of start, reverse from start to end, record successor of end, link pre-node and successor

Solution:
Record
(m-1)
elementReverse from
m
ton
Record
(n+1)
elementCorrectly link
(m-1)
to nth and linkm
th to(n+1)
记录第
(m-1)
个元素反转第
m
到第n
个元素记录第
(n+1)
个元素连接
(m-1)
到n
,连接m
到(n+1)
refer to #206.
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
if(left == right) return head;
// find the Node just before left
ListNode dump = new ListNode();
dump.next = head;
ListNode pre = new ListNode();
pre = dump;
for(int i = 1; i < left; i ++) {
head = head.next;
pre = pre.next;
}
// reverse [left, right]
ListNode start = head, preNode = head;
head = head.next;
for(int i = left; i < right; i ++) {
ListNode tempNode = head.next;
head.next = preNode;
preNode = head;
head = tempNode;
}
// connect pre -> reverse -> tail
pre.next = preNode;
start.next = head;
return dump.next;
}
}
Last updated
Was this helpful?