[LeetCode] Reverse Linked List II 解题报告
来源:互联网 发布:大汉主义知乎 编辑:程序博客网 时间:2024/05/15 12:50
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
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.
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
» Solve this problem
[解题思路]
分三步走
1. 找到m节点的前一个指针pre(加个safe guard可避免头指针的问题)
2. 从m节点开始往后reverse N个节点(双指针,cur,post)
3. 合并pre链表,cur链表及post链表。
这题难就难在繁琐上,要考虑各种边界条件,比如
{1,2,3}, 3,3
{1,2,3}, 1,1
{1,2,3}, 1,3
所以,code中需要添加一些边界检查条件。这题15分钟以内bug free我是做不到。
1: ListNode *reverseBetween(ListNode *head, int m, int n) {
2: // Start typing your C/C++ solution below
3: // DO NOT write int main() function
4: int step = n-m;
5: ListNode* safeG = new ListNode(-1); //intro a safe guard to avoid handle head case
6: safeG->next = head;
7: head = safeG;
8: ListNode* pre = head;
9: while(m>1)
10: {
11: pre=pre->next;
12: m--;
13: }
14: ListNode* cur = pre->next, *post = cur->next;
15: if(step>=1)
16: {
17: while(step>0 && post!=NULL)
18: {
19: ListNode* temp = post->next;
20: post->next = cur;
21: cur = post;
22: post = temp;
23: step--;
24: }
25: ListNode* temp = pre->next;
26: pre->next = cur;
27: temp->next = post;
28: }
29: safeG = head;
30: head = head->next;
31: delete safeG;
32: return head;
33: }
Update: 3/19/2013. SafeG在这里没有意义。
Update 3/6/2014. 又看了一遍,SafeG还是有必要的,避免对于head的处理。
0 0
- [LeetCode]Reverse Linked List II, 解题报告
- [LeetCode]Reverse Linked List II解题报告
- 【LeetCode】Reverse Linked List II 解题报告
- [LeetCode] Reverse Linked List II 解题报告
- [leetcode] 92. Reverse Linked List II 解题报告
- [Leetcode] 92. Reverse Linked List II 解题报告
- LeetCode-Reverse Linked List-解题报告
- [leetcode] 206. Reverse Linked List 解题报告
- 【LeetCode】Reverse Linked List 解题报告
- LeetCode 206. Reverse Linked List 解题报告
- [Leetcode] 206. Reverse Linked List 解题报告
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- Reverse Linked List 解题报告
- 【LeetCode】206.Reverse Linked List(Easy)解题报告
- LeetCode[Linked List]: Reverse Linked List II
- LeetCode: Reverse Linked List II
- LeetCode: Reverse Linked List II
- [LeetCode] Reverse Linked List II
- [LeetCode] Remove Duplicates from Sorted List 解题报告
- [LeetCode] Remove Element 解题报告
- [LeetCode] Remove Nth Node From End of List 解题报告
- [LeetCode] Restore IP Addresses 解题报告
- [LeetCode] Reverse Integer 解题报告
- [LeetCode] Reverse Linked List II 解题报告
- [LeetCode] Reverse Nodes in k-Group 解题报告
- [LeetCode] Roman To Integer 解题报告
- [LeetCode] Rotate Image 解题报告
- [LeetCode] Rotate List 解题报告
- [LeetCode] Scramble String 解题报告
- [LeetCode] Search for a Range 解题报告
- 使用flume thrift source的一点心得
- 虚拟机性能监控与故障处理工具