环有两种可能:
- 整体是一个环
- 中间有环
方法一
$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){
#表示有环
}
}