1. 程式人生 > >判斷連結串列是否有環 尋環

判斷連結串列是否有環 尋環

環有兩種可能:

  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){
        #表示有環
    
    }
}