Linked List Cycle II
生活随笔
收集整理的這篇文章主要介紹了
Linked List Cycle II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Given a linked list, return the node where the cycle begins. If there is no cycle, return?null.
Follow up:
Can you solve it without using extra space?
分析:和Linked List Cycle類似,還是用map。
用時:60ms
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *detectCycle(ListNode *head) { 12 map<ListNode*, bool> m; 13 while(head){ 14 if(m.find(head) == m.end()) m[head] = true; 15 else return head; 16 head = head->next; 17 } 18 return NULL; 19 } 20 };
?
同時,對于Linked List Cycle中的較優方法,同樣適用于本題。當fast和slow指針相遇時,令設指針slow2 = head,那么slow2和slow一定會在相遇的地方重合。
用時:16ms
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *detectCycle(ListNode *head) { 12 ListNode *fast = head, *slow = head; 13 while(fast && fast->next){ 14 fast = fast->next->next; 15 slow = slow->next; 16 if(fast == slow){ 17 ListNode* slow2 = head; 18 while(slow){ 19 if(slow2 == slow) return slow; 20 slow = slow->next; 21 slow2 = slow2->next; 22 23 } 24 } 25 } 26 return NULL; 27 } 28 };
轉載于:https://www.cnblogs.com/amazingzoe/p/4518313.html
總結
以上是生活随笔為你收集整理的Linked List Cycle II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自卸车多少钱啊?
- 下一篇: 树形结构在关系数据库中的设计