判断链表是否有环 寻环

链表环检测算法
本文详细介绍了两种检测链表中是否存在环的有效方法。第一种方法适用于整体为环的情况,通过遍历链表直到节点再次指向头部来判断。第二种方法,即快慢指针法,能检测包括“屁股环”在内的各种环形结构,通过设定不同速度的指针,若两者相遇则证明链表有环。

环有两种可能:

  1. 整体是一个环
  2. 中间有环

方法一

$node = $head;
while($node!=null){
    $node=$node->next;
    if($node==$head){
        #当有node指向头的时候我们可以确定这是一个循环链表
    }
    
}
#这只能判断第一种情况,第二种情况这种方法是不行的

方法二

#链表不能同时指向两个方向,所以就算中间有环只能是“屁股环”,想象数字6
#解决思路是,操场上跑步,同时起步,但速度不一致,快的总会在某一刻追上慢的
$node1 = $head;
$node2 = $head;
while($node1!=null && $node2!=null){
    $node1 = $node1->next;#跑一步
    $node2 = $node2->next-next;#跑两步
    #如果某一刻他们其中一个指向了null证明链表有结尾,中间不可能有环
    if($node1==$node2){
        #表示有环
    
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值