題目:

分析
回傳入環的第一個節點之前我們要判斷是否成環,判斷方法如下

判斷了是否成環之后怎么找到成環的第一個節點呢,分析如下

代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
//先判斷是不是環,如果是找出第一次相遇的位置
if(head==NULL||head->next==NULL)
return NULL;//成環最少兩個
struct ListNode *slow=head;
struct ListNode *fast=head;
while(fast)
{
slow=slow->next;
if(fast->next==NULL)//防止越界
return NULL;
fast=fast->next->next;
if(slow==fast)//重合了
break;
}
if(fast==NULL)
return fast;
//此時得到第一次相遇的位置
struct ListNode *dst=head;//從原點開始出發
while(1)
{
if(dst==slow)//找到了,回傳
return dst;
dst=dst->next;
slow=slow->next;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233067.html
標籤:其他
