判斷鍊錶是否有環,若有,計算環長度

2021-10-02 13:45:48 字數 543 閱讀 5672

原文:

思想:快慢指標法。快指標的步長是2,慢指標的步長是1,若相遇,則必有環。

int

hascycle

(listnode *head)

fast=head;

slow=head;if(

null

!=fast &&

null

!=fast->next)

}return0;

}

環長計算思想:快慢指標從第一次重合到第二次重合,慢指標的步長為環的長度。

int

getlooplength

(node* head)

slow = slow->next;

fast = fast->next->next;

int length =1;

//環長度

while

( fast != slow )

//再次相遇

return length;

}

如何判斷鍊錶是否有環?如何計算環的長度?

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...

如何判斷鍊錶是否有環 鍊錶是否有環的判斷

對於鍊錶是否存在環,有三個問題需要考慮 1.是否有環 2.入環節點 3.環的長度 第一種方法快慢指標法,也稱之為龜兔演算法,設定兩個指標,慢指標和快指標。最開始均指向鍊錶的頭節點,之後,快指標每次後移兩個節點,慢指標每次後移乙個節點。1.如果快指標指向空,則鍊錶無環 2.若快指標和慢指標再次指向乙個...

判斷鍊錶是否有環

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...