题目:
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given1->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.1 public ListNode reverseBetween(ListNode head, int m, int n) { 2 if(head == null) return null; 3 ListNode dummy = new ListNode(0); 4 dummy.next = head; 5 ListNode pre = dummy; 6 ListNode start = head; 7 8 for (int i = 1; i < m; i++) { 9 start = start.next;10 pre = pre.next;11 }12 ListNode end = start;13 ListNode then = start.next;14 ListNode temp = then;15 for (int j = 0; j < n - m; j++) {16 temp = then.next;17 then.next = start;18 start = then;19 then = temp;20 }21 pre.next = start;22 end.next = then;23 return dummy.next;24 }
感觉写的挺丑的。。。