判斷單向鍊錶是否有環

2021-09-17 07:43:55 字數 712 閱讀 7967

若單向鍊錶存在環那麼鍊錶的形態為

有環的鍊錶簡單的遍歷走不到尾

那麼我們怎麼判斷有環呢?環就像是操場的的跑到 那麼運動天賦一向不太好的 我很容易就能想到跑步時容易讓人扣圈

同理 我們可以定義兩個指標讓他們同時指向鍊錶的頭 乙個指標一次走兩步 乙個指標一次走一步 那麼如果鍊錶有環那麼他們一定會在環內的某一點相遇 假如這一點就為環內標號為k的點,這時我們讓乙個指標不動,乙個指標繼續向後走 一次走一步 這樣等到連個指標再次相遇的時候我們就可以求出環的長度為n,既然我們已經知道了環的長度 那麼我們就可以求出環的入口位置 

我們定義兩個指標指向鍊錶的頭結點 讓乙個指標先走n 步 然後再讓兩個指標同時走那麼當兩個指標相遇的時候就是這個環的入口位置

判斷是否有環

typedef struct nodenode;  

bool exitloop(node *head)  

node *fast, *slow ;  

slow = fast = head ;  

while (slow != null && fast -> next != null)  

slow = slow -> next ;  

fast = fast -> next -> next ;  

if (slow == fast)  

return true ;  

return false ;  

找到環的入口節點

單向鍊錶判斷是否有環

如何最有效的檢查單向鍊錶中是否包含了環。請避免使用額外的記憶體。先給出答案吧 定義兩個指標。指標a從鍊錶開始處每次向後移動一個節點。指標b從鍊錶開始處每次向後移動兩個節點。問題的關鍵是乙個單項鍊表中只可能有乙個環,並且指標一旦進入環中就無法離開。因此我們可以預期經過一段時間後,a剛好指向環的第乙個節...

判斷單向鍊錶是否有環

找出環的入口點 求環的長度 求環上距離任意一點最遠的點 判斷兩個無環鏈表是否相交 判斷相交的位置 給乙個單鏈表,判斷其中是否有環的存在 如果存在環,找出環的入口點 如果存在環,求出環上節點的個數 如果存在環,求出鍊錶的長度 如果存在環,求出環上距離任意乙個節點最遠的點 對面節點 如何判斷兩個無環鏈表...

如何判斷單向鍊錶中是否有環

首先遍歷鍊錶,尋找是否有相同位址,藉此判斷鍊錶中是否有環 如果不考慮空間複雜度,可以使用乙個map記錄走過的節點,當遇到第乙個在map中存在的節點時,就說明回到了出發點,即鍊錶有環,同時也找到了環的入口。如果程式進入死迴圈,則需要一塊空間來儲存指標,遍歷新指標時將其和儲存的舊指標比對,若有相同指標,...