之前已经判断一环形链表是否有环。顺其自然,我们需要找到这个入口在哪。
#include<iostream>
struct ListNode{
int data;
ListNode* next;
}
static ListNode* pQuick, pSlowy; //static功能之一:对其他文件隐藏该变量或函数
static ListNode* pSlowy;
bool isHasCycle(ListNode* phead)
{
pQuick = pSlowy = head;
while(pQuick->next->next && pSlowy->next)
{
if(pQuick == pSlowy)
{
return true;
}
}
return false;
}
ListNode* GetInsert(ListNode* phead)
{
if(isHasCycle(phead))
{
pQuick = phead; //这里是我画图分析的。将快指针放到phead开始的地方,
//每次走一步。满指针从自己现在的位置每次走一步,两个相交的地方就是环的入口
while(pQuick->next && pSlowy->next)
{
if(pQuick == pSlowy)
{
return pQuick;
}
}
}
}