每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置

本文探讨了如何判断链表是否存在环,并提供了两种方法寻找环的入口位置。通过快慢指针技巧,解释了在链表有环的情况下,如何确定环的入口,并给出了相关LeetCode题目的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linked List Cycle

原题链接Linked List Cycle

判断一个链表是否有环,空间复杂度是O(1)

如果不考虑空间复杂度,可以使用一个map记录走过的节点,当遇到第一个在map中存在的节点时,就说明回到了出发点,即链表有环,同时也找到了环的入口。

不适用额外内存空间的技巧是使用快慢指针,即采用两个指针walker和runner,walker每次移动一步而runner每次移动两步。当walker和runner第一次相遇时,证明链表有环

以图片为例,假设环的长度为 R ,当慢指针 walker 走到环入口时快指针 runner 的位置如图,且二者之间的距离为 S 。在慢指针进入环后的 t 时间内,快指针从距离环入口 S 处走了 2t 个节点,相当于从环入口走了 S+2t 个节点。而此时慢指针从环入口走了t个节点。

假设快慢指针一定可以相遇,那么有

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值