之前的一篇部落格《
如何判斷兩條單鏈表是否有交點
》只說了如何判斷是否有交點,但並沒有提及如何得到交點。
設定陣列分別儲存兩條鍊錶所有節點的位址,然後一 一比較?可行是可行,不過空間時間複雜度太高,不建議使用。
那有沒有更高效的方法呢?
方法1從相交鍊錶的特點來切入分析,看看下面這張圖。
一般來說,相交鍊錶會自相交點後有一段公共區域。綠色圈起部分。然而這兩條紅色a和藍色b鍊錶的長度差別是不是就是進入公共區域前的長度差?排除特殊情況(兩條鍊錶長度相等),總會有乙個鍊錶比另乙個鍊錶長,如果讓比較長的鍊錶提前走過長度差的距離(粉色lena-lenb),然後再讓兩條鍊錶開始同步往後走,他們就會同步到達相交點,這樣判斷不就輕鬆多了?如果兩條鍊錶長度相等,兩者同時走就好了。
建立個案例測試下。
獲取單鏈表交點**如下
方法2上篇部落格才說的 環 的問題《
單鏈表有關 環 的問題》,是否可以聯絡一下?
讓a鍊錶遍歷到尾巴,然後讓a鍊錶的尾結點指向b鍊錶的頭節點。
問題就轉變為求a鍊錶的入環點問題了。是不是很有靈性呢?
判斷兩個單鏈表是否有交點
問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...
檢查兩個單鏈表是否有交點
思路1 先遍歷第乙個鍊錶到他的尾部,然後將尾部的next指標指向第二個鍊錶 尾部指標的next本來指向的是null 這樣兩個鍊錶就合成了乙個鍊錶,判斷原來的兩個鍊錶是否相交也就轉變成了判斷新的鍊錶是否有環的問題了 即判斷單鏈表是否有環?思路2 如果他們相交的話,那麼他們最後的乙個節點一定是相同的,否...
求兩單鏈表交點
題目 已知兩單鏈表有交點,給出兩單鏈表的頭指標,求交點位置。思路 自交點至公共尾部的結點都是相同的,則分別遍歷兩個鍊錶,並將每個結點的指標分別儲存在兩個陣列中,然後從兩陣列尾部開始比較,到兩指標值開始不同時,前一位置即使指向交點的指標。思路 分別遍歷兩鍊錶,得到各自的長度l1 l2,然後長的減短的得...