[LintCode]Reverse Linked List II
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
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) {
// 2016-9-24
if (head == null) {
return head;
}
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode pre = preHead;
ListNode node = head;
for (int i = 1; i < m; i++) {
pre = node;
node = node.next;
}
pre.next = null;
ListNode finalReverseNode = node;
for (int i = 0; i < n - m + 1; i++) {
ListNode temp = node.next;
node.next = pre.next;
pre.next = node;
node = temp;
}
finalReverseNode.next = node;
return preHead.next;
}
}