美文网首页算法与数据结构二叉树之下数据结构和算法分析
剑指Offer55 链表环入口(链表多指针遍历)

剑指Offer55 链表环入口(链表多指针遍历)

作者: 北国雪WRG | 来源:发表于2019-01-21 13:25 被阅读1次

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    带有环的链表.png
    1. 设置两个指针,快指针每次走两步,慢指针每次走一步
    2. 两个指针同时走,直到相遇
    3. 记录相遇点为B
    4. 设置两个指针,一个从A出发,一个从B出发,必定在C相遇!

    为啥呢????

    1. 当在B相遇的时候,快指针比慢指针多走了N个环
    2. 快指针还差BC长度就走了 AC + M个环
    3. 所以BC = AC + S个环
    4. 从A和B同时出发的两个速度相同的指针点显然在C(仔细琢磨为啥)

    牛客网

        public ListNode EntryNodeOfLoop(ListNode pHead)
        {
             if(pHead==null||pHead.next==null)return null;
             ListNode p1=pHead;
             ListNode p2=pHead;
            while(p2!=null&&p2.next!=null)
             {
                p1=p1.next;
                p2=p2.next.next;
                if(p1==p2)
                {
                    p1=pHead;
                    while(p1!=p2)
                    {
                        p1=p1.next;
                        p2=p2.next;
                    }
                    if(p1==p2)return p1;
                }
            }
            return null;
        }
    

    相关文章

      网友评论

        本文标题:剑指Offer55 链表环入口(链表多指针遍历)

        本文链接:https://www.haomeiwen.com/subject/gbhcjqtx.html