🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
我们先来看一下这道题的代码部分:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head)
{
struct ListNode*slow=head;
struct ListNode*fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(fast==slow)
{
struct ListNode*meet=slow;
while(meet!=head)
{
head=head->next;
meet=meet->next;
}
return meet;
}
}
return NULL;
}
思路:
我们在这张图片中,我们可以看到,假设快慢指针二者之间的速度差值为1的情况下,当二者相遇之后,从相遇点出发和从头结点出发,二者恰好在第一个环的节点处相遇。