程式設計之美 如何判斷單鏈表裡面是否有環?

2021-07-04 19:39:33 字數 925 閱讀 3971

1.如何判斷單鏈表裡面是否有環?

演算法的思想是設定兩個指標p, q,其中p每次向前移動一步,q每次向前移動兩步。q肯定一直在p前面。那麼如果單鏈表存在環,則p和q相遇;否則q將首先遇到null。

這裡乙個簡單的理解是,p和q同時在操場跑步,其中q的速度是p的兩倍,當他們兩個同時出發時,p跑一圈到達起點,而q此時也剛 好跑完兩圈到達起點。

2.如何判斷單鏈表的環的長度?

這個比較簡單,知道q 已經進入到環裡,儲存該位置。然後由該位置遍歷,當再次碰到該q 位置即可,所迭代的次數就是環的長度。

3. 如何找到鍊錶中第乙個在環裡的節點?

假設鍊錶長度是l,前半部分長度為k-1,那麼第乙個再環裡的節點是k,環的長度是 n, 那麼當q=2p時, 什麼時候第一次相交呢?當q指標走到第k個節點時,q指標已經在環的第 k mod n 的位置。即p和q 相差k個元素,從不同的起點開始,則相交的位置為 n-k, 則有了下面的圖:

從圖上可以明顯看到,當p從交點的位置(n-k) ,向前遍歷k個節點就到到達環的第乙個幾點,節點k.

演算法就很簡單: 乙個指標從p和q 中的第一次相交的位置起(n-k),另外乙個指標從煉表頭開始遍歷,其交點就是鍊錶中第乙個在環裡的交點。

4. 如果判斷兩個單鏈表有交?第乙個交點在**?

這個問題畫出圖,就可以很容易轉化為前面的題目。

將其中乙個鍊錶中的尾節點與頭節點聯絡起來,則很容發現問題轉化為問題3,求有環的鍊錶的第乙個在環裡的節點。

如何判斷單鏈表裡面是否有環?

如何判斷單鏈表裡面是否有環?演算法的思想是設定兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單鏈表存在環,則p和q相遇 否則q將首先遇到null。這裡主要理解乙個問題,就是為什麼當單鏈表存在環時,p和q一定會相遇呢?假定單鏈表的長度為n,並且該單鏈表是環狀的,那麼第i次迭代時,...

如何判斷單鏈表裡面是否有環?

如何判斷單鏈表裡面是否有環?演算法的思想是設定兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單鏈表存在環,則p和q相遇 否則q將首先遇到null。這裡主要理解乙個問題,就是為什麼當單鏈表存在環時,p和q一定會相遇呢?假定單鏈表的長度為n,並且該單鏈表是環狀的,那麼第i次迭代時,...

判斷單鏈表裡面有沒有環

題目 0.如何判斷單鏈表裡面是否有環?演算法的思想是設定兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單鏈表存在環,則p和q相遇 否則q將首先遇到null。這裡主要理解乙個問題,就是為什麼當單鏈表存在環時,p和q一定會相遇呢?假定單鏈表的長度為n,並且該單鏈表是環狀的,那麼第i...