// ref // http://blog.csdn.net/linhuanmars/article/details/24613781
难点,多指针操作
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummy = new ListNode (0);
if (head == null) return null;
dummy.next = head;
int cnt=1;
ListNode pre = dummy; // pre node is the one pre to mnode;
ListNode mnode = head;
while(cnt<m && pre.next!=null){
cnt++;
pre = pre.next;
mnode = mnode.next;
}
if(cnt<m) return head;
ListNode cur = mnode.next;
while(cur!=null && cnt<n){
ListNode next = cur.next;
cur.next = pre.next;
pre.next = cur;
mnode.next = next;
cur = next;
cnt++;
}
return dummy.next;
}
}