https://leetcode.cn/problems/linked-list-cycle-ii/
思路1:将环断开
1、设置快慢指针找到交点。
2、保留交点下个节点为起始节点,并将交点下个节点设置为空,此时便成为了两条链表汇聚成一条。找交点即可。()
思路2:
1、设置快慢二倍速指针找到交点。
2、一个从头节点出发,一个指针从交点出发,二者必定相遇且相遇点即为入圆点。
推理如下:
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode *slow,*fast;
slow = fast = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(fast == slow)
{
struct ListNode *mean = slow;
while(head != mean)
{
head = head->next;
mean = mean->next;
}
return mean;
}
}
return NULL;
}