题解 | #链表中环的入口结点#

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* MeetNode(ListNode* pHead)
    {
        if(pHead==nullptr)
            return nullptr;
        
        ListNode* pSlow=pHead;
        ListNode* pFast=pHead;

        while(pFast!=nullptr&&pFast->next!=nullptr)
        {
            pFast=pFast->next->next;
            pSlow=pSlow->next;

            if(pSlow==pFast)
                return pFast;
        }
        return nullptr;
    }
    ListNode* EntryNodeOfLoop(ListNode* pHead) 
    {

        ListNode* meetNode=MeetNode(pHead);

        if(meetNode==nullptr)
            return nullptr;

        ListNode* pNode1=pHead;
        ListNode* pNode2=meetNode;

        while (pNode1!=pNode2) 
        {
            pNode1=pNode1->next;
            pNode2=pNode2->next;
        }
        return pNode1;
    }
};

1.注意快指针比慢指针快一倍

2.注意相遇点为nullptr需要处理下

在相遇点和头节点处,一定是可以进行相遇的

#剑指OFFER#
全部评论

相关推荐

认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务