判断链表是否有环,若有环,寻找环节点

判断方法,创建两个指针p和q指针,p指针每次向前前进一个,q每次向前前进两个。如果存在p和q一起指向同一个结点,则证明有环。

反之如果的下一个结点为空,则无环。


如果有环,则p到环的结点时,q一定领先p的距离为b(小于环的长度n),此时p和q相遇假设需要前进y次,则q相比p多走了距离y,能够相遇可以假设q比p多走了m圈,则y+b=mn,假设m=1,则y+b=n。y+b因为p到环结点时,q已经领先p距离b。


若有环,寻找环节点:分别从碰撞点和链表头结点出发,相遇的点即为环开始结点。

证明:如果有环,则p到环的结点时,q一定领先p的距离为b(小于环的长度n),实际领先距离可以表示为xn+b,指针p1和q1分别从链表开始结点和碰撞点出发,从开始结点出发需要走xn+b到环节点,从碰撞点出发为:n-b+xn+b=(x+1)n,q1正好位于环的开始结点,两指针在环开始结点相遇。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值