1986
Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.
Example: Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head == null || m >= n) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
head = dummy;
for(int i = 1; i < m; i++) {
head = head.next;
}
ListNode premNode = head;
ListNode mNode = head.next;
ListNode nNode = head.next;
ListNode postnNode = nNode.next;
for(int i = m; i < n; i++) {
ListNode temp = postnNode.next;
postnNode.next = nNode;
nNode = postnNode;
postnNode = temp;
}
premNode.next = nNode;
mNode.next = postnNode;
return dummy.next;
}
}