【发布时间】:2019-11-07 09:54:03
【问题描述】:
给定一个链表,返回循环开始的节点。如果没有循环,返回null。
使用兔子和乌龟算法检测到循环后,我看不懂 相等如何从起始地址和循环检测地址移动导致提供循环开始的地址。
ListNode* Solution::detectCycle(ListNode* A) {
ListNode* p=A;
ListNode* q=A;
while(p!=NULL && q!=NULL && q->next!=NULL)
{
p=p->next;
q=q->next->next;
if(p==q)
{
p=A;
while(p!=q)
{
p=p->next;
q=q->next;
}
return p;
}
}
return NULL;
}
【问题讨论】:
-
我已经知道代码中发生了什么。问题是当 p==q 我们检测到一个循环但是当一个指针从 p 的头部移动到 q 的指针相等的时间(检测到循环的地方)时,为什么我们会得到循环开始的地址的开头。
标签: c++ loops linked-list cycle