0%

链表环-快慢指针的数学原理

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null){
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while(slow != fast){
if(fast == null || fast.next == null){
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}

原理解析

快指针慢指针距离1格,快指针每次移动2格,满指针每次移动1格。当两个指针都进入环后,那么移动$n$次且相遇时有:

图解

$k_{1}$与$k_{2}$取合适的整数时,此方程的n有解。故若链表中存在环,那么快慢指针必定会相遇。

本文标题:链表环-快慢指针的数学原理

文章作者:SkecisAI

发布时间:2020年10月09日 - 17:40:57

最后更新:2021年12月02日 - 20:41:46

原始链接:http://www.skecis.top/2020/10/09/循环链表快慢指针/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感谢你的支持,希望本文能助你一臂之力。