[Leetcode] Reverse Linked List II
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.
Solution:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode reverseBetween(ListNode head, int m, int n) { 14 if(m==n) 15 return head; 16 ListNode dummy=new ListNode(-1); 17 dummy.next=head; 18 ListNode pointer=dummy; 19 int cnt=m-1; 20 while(cnt!=0){ 21 pointer=pointer.next; 22 cnt--; 23 } 24 ListNode l1,l2,l3; 25 l1=pointer.next; 26 ListNode last=l1; 27 l2=l1.next; 28 l3=l2.next; 29 cnt=n-m-1; 30 while(cnt!=0){ 31 l2.next=l1; 32 33 l1=l2; 34 l2=l3; 35 l3=l3.next; 36 cnt--; 37 } 38 l2.next=l1; 39 last.next=l3; 40 pointer.next=l2; 41 return dummy.next; 42 } 43 }