欢迎来到本期频道!- - -
使用快慢指针方法解决环形链表Ⅱ
环形链表Ⅱ( 点击可跳转到该题 )
描述:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ad68469ba79f4d31a966639306f5eec3.png#pic_center)
1.给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL。 |
2.不允许修改链表。 |
答:
根据描述可知:
由以上信息提出问题:
怎么判断是否有环?;
如何找到并返回入环节点?
struct ListNode* detectCycle(struct ListNode *head)
{
struct ListNode * slow=head;
struct ListNode * fast=head;
struct ListNode * meet=NULL;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
{
meet=slow;
while(head!=meet)
{
head=head->next;
meet=meet->next;
}
return meet;
}
}
return NULL;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b6704536d5fa4d4ea819a59b19c1b467.png#pic_center)
while(head!=meet)
{
head=head->next;
meet=meet->next;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/83dd54d2d2fa4a70972fd7df60e76a44.png#pic_center)
如果你觉得so easy,可以试试如何证明n步相遇的情况,证明完后请教教我😘