【Floyd判圈算法】

Floyd判圈算法

Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。

判断链表中是否存在环

利用快慢指针,两者初始都在起点S,其中快指针fastindex每一次移动两步,慢指针slowindex每次移动一步,快指针一定比慢指针先进入环中。
需要认识到:快指针相对于慢指针每次是移动一步的,因此在慢指针也进入环后,两者一定能相遇在M点,此时链表便存在环。反之,若快指针移动到空节点,便无环。
题目链接:力扣T141.环形链表

链表环的长度

当两指针相遇在M点时,保持快指针fastindex不动,慢指针slowindex每次移动一步并记录移动步数,当慢指针slowindex再次回到M点即与快指针fastindex相遇后,此时慢指针正好走了环的一圈,步数为环的长度。

链表环的起点

当两指针相遇在M点时,保持慢指针slowindex在相遇处M点,快指针fastindex回到起点S,令快指针fastindex和慢指针slowindex同步每次移动一步,当两者再次相遇时便为环的起点S。

链表环的起点证明

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ImSev7en_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值