做该题前,建议先做另一道题:判断链表是否有环。第一道题吃透了,再来看这道题,就是在其基础上找入口点。
核心思想还是:链接参考他人
借这里分享一下c的代码实现
struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) {
// write code here
int exist=0;
if(pHead == NULL)
{
return pHead;
}
struct ListNode * temp=pHead;
struct ListNode * slow=pHead;
struct ListNode * fast=pHead;
while(fast != NULL && fast->next != NULL)
{
slow=slow->next;
fast=fast->next->next;
if(slow == fast)
{
exist=1;
break;
}
}
// 有无环
if(exist == 0)
{
return NULL;
}
// 有环,找入口节点
while(temp != slow)
{
temp=temp->next;
slow=slow->next;
}
return temp;
}