單鏈表的環入口,環大小,解環

2022-02-04 01:31:07 字數 846 閱讀 9863

1.單鏈表是否有環

使用快慢指標,都從head出發,慢指標一次一步,快指標一次兩步,如果兩個指標相遇,說明鍊錶有環,否則,快指標為null或其next為null,到達末尾節點

function

hascircle(head)

}return fast != null && fast.next != null

;}

2.單鏈錶環的入口點

使用快慢指標,先判斷是否有環,若有環,則慢指標從head出發,快指標與其同樣的速度執行,直到相遇的一點,即為環入口點。

function

getcircleentry(head)

}if(fast == null || fast.next == null

) slow =head;

while(slow !=fast)

return

fast;

}

3. 單鏈錶環的大小

指標繞環一圈,記錄其走過的步數,即為環大小

function

getcirclelen(head)

}return

len;

}

4. 解開乙個環

找到環入口點的後面乙個節點,即環的末尾節點,將其next設定為null,斷鏈,解環

function

breakcircle(head)

p.next = null

; }

}

判斷單鏈表是否存在環,尋找單鏈錶環的入口

判斷單鏈表是否存在環,如果存在環,找出環的入口 有乙個單鏈表,其中可能有乙個環,也就是某個節點的next指向的是鍊錶中在它之前的節點,這樣在鍊錶的尾部形成一環。問題 1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如何找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fa...

判斷單鏈表是否有環,若有環輸出環的入口節點

思路 1 快慢引用 fast 一次跑兩個,slow一次跑乙個兩者相遇有環,但相遇點不一定是入口點,如何證明是不是入口點?快路徑長度 2慢路徑長度 2 實現 public class link return null public void addhead t value else public vo...

判斷單鏈表是否有環及找環的入口

使用快慢指標,找到相遇節點 然後乙個指標指向頭節點,乙個指向相遇節點,一步步走直到兩個指標指向同乙個節點 即為環的入口點 include using namespace std typedef struct nodenode,linklist bool i istsloop linklist l r...