美文网首页
环链表找入口原理证明

环链表找入口原理证明

作者: 路飞_Luck | 来源:发表于2020-10-31 23:26 被阅读0次
一 目的
  • 定理推论证明
二 定理推论证明
image.png

上述变量名称解释

P1:链表的起点
D:链表的环入口(假设链表有环)
P2:快慢指针相遇的位置
X:链表起点 P1 到环入口 D 的距离
Y:链表环入口 D 到相遇节点 P2 的距离
Z:快慢指针相遇点 P2 到环入口 D的距离
C:链表环的距离,即 y + z
开始证明

假设快慢指针相遇时,快指针在环内走了m圈,慢指针在环内走了n圈,则有如下公式

  • 快指针总共走的距离为
 x + y + m * c
  • 慢指针总共走的距离为
x + y + n * c

假设快指针每次走2步,慢指针每次走1步,则快指针走过的距离是慢指针走过距离的2

(x + y + m * c) = 2(x + y + n * c)                     结论1

又因为环长为c = z + y,所以得出下面结论

(x + y + m * c) = 2(x + y + n * c)   
-> c(m - 2n) = x + y
-> c(m - 2n) = x + c - z
-> x = mc - 2nc - c + z
-> x = (m - 2n - 1) * c + z        结论2
image.png

入上图所知,

  1. 假设 一个指针point1从起点出发,走了(m-2n-1)*c步到达了P1位置。
  2. 另外一个指针point2从相遇点P2开始出发,也走了(m-2n-1)*c步,最终还是停留在P1的位置(相当于绕环走了c圈而已)。
  3. 这个时候,第一个指针point1距离环入口的距离是z(由结论2得知),第二个指针point2距离环入口距离是z(之前的假设),所以两个指针再同时走z步,就会在环入口D处相遇
结论

要想知道环入口位置,只需先使用快慢指针,在环内找到相遇点P2,然后再让两个指针,一个从起点开始出发,一个从相遇点P2开始出发,每次走一步,最终相遇的地方,即为环入口D,走过的距离,也就是环入口的距离X,定理推论完毕。

相关文章

  • 环链表找入口原理证明

    一 目的 定理推论证明 二 定理推论证明 上述变量名称解释 开始证明 假设快慢指针相遇时,快指针在环内走了m圈,慢...

  • 剑指 offer 笔记 55 | 链表中环的入口结点

    题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路分析1、证明链表是否存在环...

  • 数据结构与算法整理

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

  • 链表

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

  • 面试题20:链表中环的入口节点

    题目:如果一个链表中包含环,如何找到环的入口节点思路:分为判断是不是有环,找环的入口 快慢指针,如果快指针能够追上...

  • 找链表的环入口问题

    题目:已知一个链表有环,求环的入口 链表有环,所以让一个快指针,一个慢指针,同时从起点出发,他们必定在环中相遇。而...

  • 链表

    合并排序链表 链表排序 链表中环的入口结点 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出nul...

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

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

  • 环链表入口

    题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路:快(一次两步)慢(一次...

  • 编程案例自我总结(二)

    16.链表环的入口:如果一个连表中包含环,求出环的入口节点(回归链表的地方)。 思路:1.确认环是否存在 ...

网友评论

      本文标题:环链表找入口原理证明

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