Reverse Linked List II
2014-01-31 05:34
337 查看
Reverse Linked List II
Total Accepted: 4937 TotalSubmissions: 19604My Submissions
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.
Discuss
首先找到m的node. 同时要记录他的前一个node (pre)
reverse list 从 m 开始的list, 递归的次数是 count = n-m+1, 也就是说把 m~n 这段list reverse. 同时,要连接reverse的最后一个node 和 n+1节点
reverse 返回的是 reverse list 的开始,需要把开始节点和 m-1 和 m 节点来接起来,这里,如果pre == null, 说明我们是从整个list的头开始reverse n-m+1 次的, 所以直接返回 start即可。
public static ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode temp = dummy;
int count = n - m +1, i = 1;
while (i < m) {
temp = temp.next;
i++;
}
ListNode reverseStart = reverse(temp.next,null,temp.next,count);
temp.next = reverseStart;
head = dummy.next;
dummy.next = null;
return head;
}
private static ListNode reverse(ListNode head, ListNode pre, ListNode start, int k) {
if (k == 0) {
start.next = head;
return pre;
}
ListNode temp = head.next;
head.next = pre;
return reverse(temp, head, start, k - 1);
}
相关文章推荐
- 【LeetCode】92. Reverse Linked List II
- Reverse Linked List II
- [leetcode]Reverse Linked List II (反转链表值 C语言实现)
- Reverse Linked List II -- LeetCode
- leetcode:Reverse Linked List II (反转链表中的一部分)【面试算法题】
- [leetcode] 92. Reverse Linked List II
- Leetcode: 92. Reverse Linked List II
- [LeetCode] 088: Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- [LeetCode]92 Reverse Linked List II
- 【Leetcode】Reverse Linked List II
- [LeetCode]92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- [LeetCode]Reverse Linked List II
- 92. Reverse Linked List II
- leetcode_92_Reverse Linked List II
- 闲话链表(二) leetcode 之 Reverse Linked List II
- LeetCode - Reverse Linked List II