Reverse a linked list from position m to n. Do it in-place and in one-pass
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
[code]
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(m==n)return head;
if(head==null || head.next==null)return head;
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode prev=dummy, curr=head, next=head.next;
ListNode left=dummy;
for(int i=1;i<=n;i++)
{
if(i==m)left=prev;
if(i>=m)
{
next=curr.next;
curr.next=prev;
prev=curr;
curr=next;
}
else
{
prev=curr;
curr=curr.next;
}
}
left.next.next=curr;
left.next=prev;
return dummy.next;
}
}