每日程式設計21之單鏈表相交,環的相關問題研究

2021-06-13 03:00:10 字數 706 閱讀 2524

首先如何判斷二個單鏈表是否相交,也就是所謂的y型鍊錶問題。

演算法很簡單,只要分別遍歷二個鍊錶,對比二個鍊錶的表尾元素是否相同即可

那麼再進一步,如何找到這二個鍊錶的交匯點。

只要在遍歷的時候,記錄2個鍊錶的長度,m,n,假設m>n則長度為m的鍊錶先走m-n步,然後二個指標同時走,當二個指標第一次相同的地方就是鍊錶的交匯點。

判斷乙個單鏈表是否有環,如果有環的話,如何找到起始點,以及環的長度。。也就是說如何獲得單鏈錶環的所有資訊。

用二個指標,first,second分別遍歷鍊錶,遍歷結束的條件是

(1)second走到單鏈表的盡頭(second->next==null,或second->next->next==null),如此則說明單鏈表沒有環。。

(2)對於有環的情況,second會永遠的走下去,但終究second會追上first,如此則說明單鏈表中有環。。

至於起始點和環長度的判斷

首先考慮環的長度,在單鏈表如果有環,則first,second會相遇,從相遇的地方遍歷一次,回到相遇點,在這個過程中統計元素的個數,即為環的長度。

關於起始點的問題,可以參考求二個單鏈表交匯點的思想

具體的說將這個環形單鏈表做乙個抽象的拆分,分成2個單鏈表

(1)表頭為原來單鏈表的表頭,表尾為前述first,second交匯的節點p,長度為n

(2)表頭為p,表尾為p,長度為m

over!!!

單鏈表相交與環問題

程式設計之美 裡面有一篇是講如何判斷兩鍊錶是否相交,讀後覺得原文太過囉嗦。於是,筆者總結了一下,此類問題可以擴充套件為兩大類,分別是 1 單鏈表與環問題 2 單鏈表相交與環問題 本文 給定兩單鏈表a b,只給出兩頭指標。請問 1 如何判斷兩單鏈表 無環 是否相交?有兩種可取的辦法 1 人為構環,將鍊...

有環單鏈表相交判斷

如何判斷兩個有環單鏈表是否相交?相交的話返回第乙個相交的節點,不想交的話返回空。如果兩個鍊錶長度分別為n和m,請做到時間複雜度o n m 額外空間複雜度o 1 給定兩個鍊錶的頭結點head1和head2 注意,另外兩個引數adjust0和adjust1用於調整資料,與本題求解無關 請返回乙個bool...

程式設計之美3 6 單鏈表相交的問題及證明

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?看了不少帖子,感覺還是要自己總結一下。1.對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在...