Fair Reverse Linked List IIMy Submissions
27%
Accepted
Reverse a linked list from position m to n.
Note
Given m, n satisfy the following condition: 1 ≤ m ≤ n ≤ length of list.
Example
Tags
Expand
Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL.
SOLUTION: USE DUMMY NODE
1. Four key node: PreM, Mnode, Nnode, PostN
2. Step 0: find preM node
3. reverse list (m,n): let m.next point back to m. Here m.next is the "head" in reverse linked list I.
4. Concatenate the linkedList. Mnode.next = postN
preM.next = Nnode
public class Solution {
/**
* @param ListNode head is the head of the linked list
* @oaram m and n
* @return: The head of the reversed ListNode
*/
public ListNode reverseBetween(ListNode head, int m , int n) {
if (head == null || head.next == null || m == n) {
return head;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
head = dummy;
// find prevM node, take m-1 steps
for (int i = 0; i < m - 1; i++) {
head = head.next;
}
ListNode preM = head;
//began to reverse the list
ListNode prev = preM.next;
head = prev.next;
for (int i = m; i < n; i++) {
ListNode temp = head.next;
head.next = prev;
prev = head;
head = temp;
}
//concatenate the list
preM.next.next = head;
preM.next = prev;
return dummy.next;
}
}