判斷單鏈表是否成環

2021-08-27 13:55:02 字數 565 閱讀 1665

成環:

可以是迴圈單鏈表,即首位相連;也可以是部分成環,即尾部和其他節點相連。

判斷是否成環:

使用快慢指標遍歷鍊錶:

慢指標:

從頭節點開始,一次跳乙個節點。

快指標:

從頭節點開始,一次跳兩個節點。

如果是成環的,這兩個指標一定會相遇。

如上圖所示,藍色表示慢指標,紅色表示快指標,他們在經過4次遍歷後相遇,也就是成環的。若不成環,則快指標一定先到尾部(若快慢指標起點相同)。

**實現:

public

static

void

main(string args)

private

static boolean iscyc(node node)

return

false;

}static class node

}

判斷單鏈表是否成環演算法

演算法思想 定義兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步,所以就成p為慢指標,q為快指標。那麼如果單鏈表存在環,則p和q進入環後一定會在某一點相遇,因為進入環後就會一直迴圈下去,否則q將首先遇到null,就說明不存在環。這裡肯定會有人問,就是為什麼當單鏈表存在環時,p和q一定會相遇...

判斷單鏈表是否有環

1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...

判斷單鏈表是否有環

鍊錶結構 struct list 1 判斷單鏈表是否有環 採用追趕法,設定兩個指標p和q,從煉表表頭開始,p每一步走兩個節點,q每一步走乙個節點,如果鍊錶有環則p和q必相遇。如下 判斷鍊錶是否有環,時間複雜度o n 空間複雜度o 1 list hasloopinlist list head else...