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.
-
-
-
-
-
-
-
-
- public class Solution {
- public ListNode reverseBetween(ListNode head, int m, int n) {
- if(n==m) return head;
- if(m>n){
- int t = n;
- n = m;
- m = t;
- }
- ListNode h = head;
- ListNode res = new ListNode(-1);
- ListNode pre = res;
- pre.next = h;
- int count = 1;
-
- while(h!=null&&count<m){
- pre = pre.next;
- h = h.next;
- count++;
- }
- ListNode cur = h;
- ListNode fhead = new ListNode(-1);
- ListNode last = cur;
- while(count<=n){
- pre.next = cur.next;
- cur.next = fhead.next;
- fhead.next = cur;
- cur = pre.next;
- count++;
- }
- last.next = pre.next;
- pre.next = fhead.next;
- return res.next;
- }
- }