链表 141 带环链表
这个题目有点东西,感觉有点难想,官方给的题解是
快慢指针,快指针一次走两步,慢指针一次走一步,当快指针与慢相等时表示有环,
其意思是,快指针一直走在慢指针前面,假若有环,当慢指针进入环后,就可以表示为,快指针慢指针后面,并且在追赶慢指针,当快指针在慢指针后面时,一定有机会相等,因为每一步,快指针都会比慢指针快一步
假设相差一步 会有 2 = 1 + 1
相差两步 会有 2*2 = 2 + 2
相差三步会有 2*3 = 3 + 3
相差k歩就会有 2*k = k + k;
总有一天会相等的
public static boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head.next;
while (fast != null && slow != null) {
if (fast == slow) {
return true;
}
fast = fast.next.next;
slow = slow.next;
}
<pre><code> return false;
}
评论区