快慢指针判断链表是否有环以及找环的入口

本文详细介绍了如何使用快慢指针法来判断链表中是否存在环,并找到环的入口。通过定义快慢指针的移动步长,分析了在有环和无环链表中指针的运动规律,最后给出例题和代码实现,帮助理解该算法的应用。
摘要由CSDN通过智能技术生成

一,定义

快指针fast每次走两步,慢指针slow每次走一步

%表示取模运算

二,判断是否有环

刚开始时fast和slow都在链表头;

  1. 如果链表无环,那fast和slow指针不可能相遇,且最终fast=null
  2. 如果链表有环,记开始位置到环入口长度为k,环长为R,那么t时刻(t>=k),fast在环上(2t-k)%R的位置,slow在环上(t-k)%R的位置,当(2t-k)%R=(t-k)%R时,t=n*R,所以快慢指针一定相遇,相遇点在(-k)%R

三,寻找环入口

       快慢指针相遇时,它们都在(-k)%R处;

       让快指针从头开始一步一步走,慢指针也走,那么当快指针走到环入口时,慢指针走到了

       ((-k)%R+k)%R=(-k)%R%R+k%R=(-k)%R+k%R=0%R=0处,此时快慢指针再次相

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值