兩個單鏈表相交問題

2021-07-13 14:54:52 字數 646 閱讀 8290

關於兩個鍊錶相交,很容易遷移到好多地方,比如:

1.找出兩個鍊錶相交的節點;

2.判斷單個鍊錶是否有環等;

3.二叉樹當存在父指標的時候,求樹中兩個節點的最近公共祖先;

看乙個圖:

一下只給出相當一部分思想:

方法一:將兩個鍊錶的節點進行hash操作,然後判斷出節點,這種想法是可以的。

方法二:當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。

方法三:比較建議,研究兩個鍊錶發現,如果他們相交的話,那麼他們最後的乙個節點一定是相同的,否則是不相交的。

因此判斷兩個鍊錶是否相交就很簡單了,分別遍歷到兩個鍊錶的尾部,然後判斷他們是否相同,如果相同,則相交;否則不相交。

關於相交節點:假設第乙個鍊錶長度為len1,第二個問len2,然後找出長度較長的,讓長度較長的鍊錶指標向後移動|len1 - len2| (len1-len2的絕對值),然後在開始遍歷兩個鍊錶,

判斷節點是否相同即可。

鑑於第三種方法,如果是在二叉樹中,為了尋找兩個節點的最近公共祖先,可以借用棧來儲存節點的路徑,問題很快就轉化至此!

賜教!  

兩個單鏈表相交的系列問題

在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o n m 額外 空間複雜...

兩個單鏈表相交,求開始相交的點

這題如果求兩個鍊錶是否相交,或者求相交的終點好求,要求開始相交的點,不好求。剛開始我的思路一直停留再相交的終點做文章,比如,1 知道終點,就知道終點的上乙個點,判斷它是不是,再找上上乙個點,以此類推。可惜這是個單鏈表,不能逆向遍歷。使用這種辦法,就需要遍歷n遍,效率太太低。2 終點的next指標,只...

找到兩個單鏈表相交的起始節點20201212

2.解法 鍊錶相加 1ms 41.4mb 編寫乙個程式,找到兩個單鏈表相交的起始節點。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。相交的概念,不是兩條直線相交與乙個焦點 ...