台中市网站建设_网站建设公司_Python_seo优化
2025/12/25 19:14:56 网站建设 项目流程

1.思路:快慢指针法。如果链表有环的话,快指针一定可以在一段时间后追上慢指针,这两个指针一定会相遇。

2.注意:代码比较两个节点的时候,比较的是内存地址是否一致,并没有比较节点的val。

3.疑问。

(1)快指针会不会跳过慢指针,从来不会和慢指针相遇呢?

答:

这是不可能的。如果由有环的话,那么快慢指针都会进入到环中。这个时候用“相对速度”思考,慢指针不动,快指针相对于慢指针每次只走一步,那么快慢指针一定会相遇。

(2)为什么代码里的while循环并没有判断slow是否为空?

答:

slow在fast的后面,如果fast不为空,那么slow也肯定不为空。也就是fast在探路,slow走的都是fast走过的路。

4.复杂度分析:

(1)时间复杂度:O(n),其中n是链表的长度。

(2)空间复杂度:O(1)。

附代码:

public class Solution { public boolean hasCycle(ListNode head) { ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; if(fast == slow){ return true; } } return false; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询