做该题前,建议先做另一道题:判断链表是否有环。第一道题吃透了,再来看这道题,就是在其基础上找入口点。

核心思想还是:链接参考他人

借这里分享一下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;
}