如何判断单链表有环,并找出环的入口

如何判断单链表有环,并找出环的入口?
时间 O(n) ,空间 O(1)
这个面试题还是蛮有趣的,当时只想出了第一问,第二问实在巧妙。
这里写图片描述
如图这个单链表,蓝色的部分是环。
对于如何判断链表有环,可以从起点发出两个指针,一个一次一步,另一个一次两步,如果两个指针相遇,那么这个单链表就有环。
这里写图片描述
设绿色的地方是指针相遇点。
对于第二问求环的入口,从第一问的相遇点和起点各发出一个速度为一步的指针,两个指针相遇的地方就是环的入口。
这个是别人给我的答案,我简单推了一下公式好像是对的,但是实践了后又发现好像有点细节问题,这里留下我的答案:
第一问得出相遇点后,再发出一个指针,统计这个指针再次回到这个点的距离,也就是环的距离。
然后从起点再发出两个指针,一个指针在另一个前面,两个指针的距离就是环的距离,当两个指针再次相遇的时候就是环的入口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值