标签:
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 };
标签:
原文地址:http://www.cnblogs.com/amazingzoe/p/4518313.html