• 【PHP】PHP面试存在环的单链表寻找环的入口点 && php判断单链表是否有环和相交


    php判断单链表是否有环和相交

    超级好的讲解php链表结构的教程:https://blog.csdn.net/hjh15827475896/article/details/109314432

    超级好的讲解php环形链表面试题解析:https://blog.csdn.net/fynjy/article/details/47440049

    看了这么多文章,觉得这个作者写的寻找环入口是最好理解的,对不起作者,忘记出处的网址了,当时粘到WORD文档里的,如果再次看到了,一定标明出处!!

     问题2:若存在环,如何找到环的入口点(即上图中的结点E)?
          解答:如图中所示,设链起点到环入口点间的距离为x,环入口点到问题1中fast与low重合点的距离为y,又设在fast与low重合时fast已绕环n周(n>0),且此时low移动总长度为s,则fast移动总长度为2s,环的长度为n。则
           s + kn = 2s,n>0      ①
           s = x + y               ②

    为什么会有② s = x+y,我解释一下:

    因为快指针速度是慢指针2倍,所以在慢指针进入环的那刻起,无论快指针在哪,慢指针在一圈之内必与快指针相遇。
          由①式得  s = kn                
          代入②式得
          kn = x + y
          x = kn - y                ③

    得出:

    从开始0到环形入口距离为x即kn-y;

    快指针再次回到0,走到入口处花了x距离,那么相应的慢指针也必须走x距离即kn-y,而我们知道【快慢指针第一次相遇】距离0为x+y,那么慢指针再次走x距离后当前位置为:(x+y) + (kn-y) = kn + x;

    没错,就是kn+x,kn就是k圈可以省略约去,那么慢指针此处也走到了x,是不是和快指针再次相遇了,并且快指针此时位置在入口处

  • 相关阅读:
    MapReduce原理
    《软件需求十步走》阅读笔记3
    《软件需求十步走》阅读笔记2
    《软件需求十步走》阅读笔记1
    2017秋季阅读计划
    怎么做需求分析
    兴趣小组第一次
    第十天
    第九天
    对UC的分析(个人观点,多多包涵)
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/14507008.html
Copyright © 2020-2023  润新知