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

首先如何判斷二個單鏈表是否相交,也就是所謂的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!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章