判斷乙個鍊錶是空鍊錶還是迴圈鍊錶

2021-08-31 08:31:52 字數 795 閱讀 1005

原文:

使用快慢指標判斷的好處是:可以防止如果鍊錶是類似「6」的,形狀,也就是說尾指標不是直接連到頭指標,而是它之後的指標,那麼這種情況下傳統的以頭指標作為基準判斷是否有迴圈的方法就可能陷入死迴圈。

給定乙個鍊錶,它可能是以null結尾的非迴圈鍊錶,如圖3-5所示;也可能是乙個迴圈結構結尾的迴圈鍊錶。已知這個鍊錶的頭指標,請編寫乙個函式來判斷該鍊錶是乙個迴圈鍊錶還是乙個非迴圈鍊錶,該函式不得對鍊錶本身做任何修改。

演算法:讓快慢兩個指標從鍊錶的頭元素出發開始遍歷

無限迴圈

如果快指標遇到了「null」指標

返回,該鍊錶以「null」結束,是乙個非迴圈鍊錶

如果快指標追上或者超過了慢指標

返回,該鍊錶是乙個迴圈鍊錶

讓慢指標前進乙個結點

讓快指標前進兩個結點

int determinetermination(node *head) }}

我的版本:

int determinetermination(node *head)

}

另外他人的版本:

function boolean hasloop(node startnode)

return false;

}如果這是乙個非迴圈鍊錶,快指標將在遍歷了n個節點後到達鍊錶尾,快指標將在遍歷了n個節點後達到鍊錶尾,此時滿指標只遍歷了n/2個節點;因為總共遍歷了(n+n/2=1.5n)個節點,所以這個演算法將是o(n)級的。

鍊錶 判斷乙個鍊錶是否為回文鍊錶

思路1 找到中間節點然後把後面的翻轉,需要斷開鍊錶 然後比較和頭節點開始的前段,最後要是後半段的游標可以走到最後說明是回文否則不是 思路2 整體翻轉比較 思路3 借助乙個棧存放前半段的元素,然後和後半段的比較 public boolean ispalindrome listnode head lis...

如何判斷乙個單鏈表是迴圈鍊錶

1.迴圈鍊錶的特點是收尾相接,沒有頭指標,也沒有尾指標。如果去遍歷迴圈鍊錶,則是死迴圈。2.這裡判斷迴圈鍊錶的方法是 用兩個指標,乙個指標是塊指標 跳乙個節點遍歷 遍歷快 p p netxt next 乙個指標逐步遍歷,慢指標。如果在遍歷當中,如果發現這兩個指標有可能是出現null指標的話,那邊它是...

環形鍊錶(給定乙個鍊錶,判斷鍊錶中是否有環。)

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...