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

链表中环的入口结点

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


/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) 
    {
        ListNode* fast=pHead;
        ListNode* slow=pHead;
        while(fast!=nullptr&&fast->next!=nullptr)
        {
            slow=slow->next;
            fast=fast->next->next;
            if(slow==fast)
            {
                ListNode* p=fast;
                ListNode* q=pHead;
                if(p==q)return p;//如果只有一个节点的环,需要直接返回
                while(p!=nullptr)
                {
                    p=p->next;
                    q=q->next;
                    if(p==q)return q;
                }
            }
        }
        return nullptr;
    }
};

通过双指针的另一种应用快慢指针,可以轻松解决,定义一个快指针fast,每次跳跃两个节点,定义一个慢指针slow,每次跳跃一个节点,两个指针从同一个位置开始遍历,如果最后两个指针相遇了,就说明该链表有环,如果fast直接等于nullptr了,那么就是没有环。

全部评论

相关推荐

06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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