链表小思

革命工作不能停啊, 长期坚持才能出效果。

这一段时间准备找工作,看了下书,链表的相关知识忘得差不多了。

整理下思路,写点关于链表的东西。

内容没什么深度,权当复习练手。


计算链表中环的长度通常采用快慢指针的方法,也叫做“龟兔赛跑”策略。以下是算法的大致步骤: 1. 首先,创建两个指针 `slow` 和 `fast`,初始时都指向链表的头节点。 2. `slow` 指针每次移动一步,而 `fast` 指针每次移动两步。如果链表没有环,那么当 `fast` 走到链表的末尾(即 `fast` 或者 `fast.next` 为 `null`)时,`slow` 就会到达链表的尾部,此时可以确定链表中没有环,环长为 0。 3. 如果链表有环,那么当 `fast` 指针追上了 `slow` 指针(即 `fast` 和 `fast.next` 都等于 `slow`),那么说明找到了环的存在点。从这个时刻开始,我们将 `slow` 指针重置回链表头部,然后同时让 `slow` 和 `fast` 每次都移动一步,直到它们再次相遇。这次相遇的位置就是环的入口点。 4. 计算环的长度时,我们需要找到环内的一个固定位置(比如第一次相遇时的节点)。从环的入口点开始,`slow` 指针继续向前走,每经过一次相遇就增加步数,直到它回到入口点。这时步数就表示了环的长度。 下面是伪代码描述: ```python def detectCycle(head): if not head or not head.next: return 0 slow = head fast = head while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: break if slow != fast: # 没有环 return 0 slow = head length = 0 while slow != fast: slow = slow.next fast = fast.next length += 1 return length ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值