美文网首页算法与数据结构二叉树之下数据结构和算法分析
剑指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 链表环入口(链表多指针遍历)

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 设置两个指针,快指针每次走两步,慢指针...

  • 链表中环的入口节点

    《剑指offer》面试题23:链表中环的入口节点 题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则...

  • 数据结构与算法整理

    (1)链表的技巧 快慢指针(找环,环入口,环长度) 双指针(倒数K个节点) 合并链表(递归求解) 约瑟夫环(环形链...

  • 判断单链表是否有环及寻找环的

    若单链表中存在环,则环肯定在单链表的尾部,如果通过一个指针遍历单链表,最终这个指针会在单链表尾部的环中不断循环,其...

  • 链表-链表中环的入口结点-java/c++

    链表中环的入口结点 题目描述 一个链表中包含环,请找出该链表的环的入口结点。 思路一: 用map或者set,遍历链...

  • 链表算法面试?看我就够了!——链表中存在环问题

    链表中存在环问题 3.1 判断链表是否有环 单链表中的环是指链表末尾的节点的 next 指针不为 NULL ,而是...

  • 热题 HOT 100(1-10)

    环形链表 1.给定一个链表,判断链表中是否有环。 将快指针的移动速度设置为慢指针的两倍,将快慢指针同时遍历链表,若...

  • 面试题23(剑指offer)--链表中环的入口节点

    题目: 给一个链表,若其中包含环,请找出该链表的环的入口结点。 思路: �链表中环的入口节点 先确定有环,用快慢指...

  • 链表

    单向链表 链表反转 判断是否有环,找链表的中间节点 快慢指针 找环的入口(求两个链表的交点可以转化成这个问题) p...

  • 23.链表中环的入口节点

    题目 一个链表中包含环,请找出该链表的环的入口节点。 思路 1.先判断链表中是否包含环 (快慢指针)node1,n...

网友评论

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

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