题目
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.
这题就是细心了,由于题目保证了m、n的取值范围,代码里可以减少很多判断。
此外,为了代码简洁,可以在链表头部加个哨兵。
代码
public class ReverseLinkedListII { public ListNode reverseBetween(ListNode head, int m, int n) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode p = dummy; for (int i = 0; i < m - 1; ++i) { p = p.next; } ListNode q = p.next; for (int i = 0; i < n - m; ++i) { ListNode temp = p.next; p.next = q.next; q.next = q.next.next; p.next.next = temp; } return dummy.next; } }
LeetCode | Reverse Linked List II,布布扣,bubuko.com
LeetCode | Reverse Linked List II
原文:http://blog.csdn.net/perfect8886/article/details/20493319