1.檢查鍊錶是否帶環,若帶求長度,環入口點。
設定兩個快慢指標開始時指向起始位置,開始出發,如果這兩個指標相交,那麼存在環;從交點出發,當再次回到此點便可統計環長度;對與於環入口點,假設快指標每次走兩個位置,慢一直走乙個,如圖所示:
則只需乙個從起始點,乙個從交點移動,必會相交。
2. 檢查兩煉表否相交(鍊錶不帶環)
如果兩煉表得最後乙個位置相等,則相交。
如果帶環得話:
以下**沒有實現兩個帶環的相交
pnode checkcycle(plist plist) //判斷環
while (slow != fast);
return slow;
}int getcyclelen(plist plist) //環長度
while (cur != plist);
return len;
}pnode getcycleentrynode(plist plist, pnode meet) //入口點
return entry;
}int checkcross(plist l1, plist l2) //相交(不帶環)
while (l2)
if (prelist1 == prelist2)
return 1;
else
return 0;
}
單鏈表帶環問題
判斷單鏈表是否帶環?若帶環,求環的長度?求環的入口點?1 2 3 4 5 6 7 8 9 不帶環 鍊錶遍歷一次,到最後的節點的下乙個節點會指向null,此時鍊錶不帶環。帶環 在判斷鍊錶是否帶環之前,應該先判斷鍊錶是否為空。空鍊錶肯定不帶環。只要鍊錶帶環,對鍊錶進行遍歷就會形成死迴圈,沒有出口。這是就...
面試題 單鏈表帶環問題
關於單鏈表帶環問題 1 怎樣判斷乙個單鏈表是否帶環 2 如果帶環,環的長度怎麼計算 3 如果帶環,怎麼求環的入口 1 怎樣判斷乙個單鏈表是否帶環 我們知道,單鏈表如果帶環,那麼從煉表頭開始遍歷就會進入死迴圈。其實我們可以用上篇部落格中提到的兩個指標移動的思想來求解,在這裡可以讓兩個指標移動速度不同,...
一 單鏈表 帶環單鏈表的詳細講解
今天看了一篇關於帶環單鏈表精講的文章,在這裡給大家做乙個總結。之前看過很多有關單鏈表帶環的文章,但是有些文章講的太文章化,不容易理解,理論性太強。接下來我會用最簡單通俗易懂的語言解析這個問題。當你拿到乙個單鏈表的資料資訊時,我相信大部分的人都會選擇去判斷一下這個單鏈表是否有環?這也是最基本的反應。下...