题目
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