標籤:style blog http color io ar for div art
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的解法去做,果斷逾時。最後參考了網上的思路如下:
(1)定義slow和fast指標,都指向head結點,然後slow指標每次向後走1個結點,fast指標每次向後走2個結點。
(2)如果fast指標為空白,則說明不存在環;如果fast指標和slow指標相等,則說明存在環。
(3)存在環時將slow指標指向head結點,然後slow指標和fast指標每次都向後走一個結點。
(4)如果slow指標和fast指標相等,該處結點就是環的開始結點,返回slow指標。
本文參考了:http://blog.csdn.net/cs_guoxiaozhu/article/details/14209743
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 if(head==NULL||head->next==NULL)13 return NULL;14 ListNode *slow=head,*fast=head;15 while(fast!=NULL)16 {17 slow=slow->next;18 fast=fast->next;19 if(fast!=NULL)20 fast=fast->next;21 if(slow==fast)22 {23 slow=head;24 while(slow!=fast)25 {26 slow=slow->next;27 fast=fast->next;28 }29 return slow;30 }31 }32 return NULL;33 }34 };
LeetCode:Linked List Cycle II