題目:
分析
返回入環的第一個節點以前咱們要判斷是否成環,判斷方法以下
判斷了是否成環以後怎麼找到成環的第一個節點呢,分析以下
代碼
code
/** * 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; } }