美文网首页
【剑指Offer刷题小记】链表中环的入口节点(JAVA版)

【剑指Offer刷题小记】链表中环的入口节点(JAVA版)

作者: park_one | 来源:发表于2020-04-16 23:14 被阅读0次

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

    问题分析:设置快慢两个指针,从链表头节点出发,快指针每次走两步,慢指针每次走一步,则两个指针必相遇在链表的环里。相遇后分别从头节点和相遇节点继续出发,并且每次都只走一步,最后将在入口节点处相遇。

    示意图

    假设环之外的节点长度为x,入口节点到相遇节点的长度为m,相遇节点到入口节点的距离为n(顺时针方向距离),那么快指针所走路程为x+k(m+n)+m  (k>=1),慢指针所走路程为x+m。并且快指针所走路程是慢指针的两倍,即2(x+m)=x+k(m+n)+m,化简得到x=(k-1)(m+n)+n,即头节点到入口节点的距离等于 相遇节点到入口节点的距离加上环的长度,也就是最终会在入口节点相遇。

    代码截图

    相关文章

      网友评论

          本文标题:【剑指Offer刷题小记】链表中环的入口节点(JAVA版)

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