首先要搞清楚單鏈表相交的概念和特點:指的是他們存在完全重合的部分,不是交叉到乙個點(不存在這種情況,可以想想為什麼),判斷其是否相交的方法有以下幾種。
(1)最傳統方法
雙重迴圈,依次查詢,是否有位址相同的節點,時間複雜度o(list1.len * list2.len),空間複雜度o(1)。
(2)hash法
先遍歷第乙個鍊錶,將每個節點的位址hash並儲存,然後遍歷第二個鍊錶的節點並計算hash值,遇到相同的hash值且位址相同則判斷為相交,且第一次hash位址相同的節點必為相交的第乙個節點。時間複雜度o(list1.len + list2.len),空間複雜度o(ist1.len)。
(3)根據尾節點判斷
因為兩個鍊錶相交必然從某個節點開始往後完全重合。遍歷兩個鍊錶至尾節點,判斷兩個尾節點是否相同即可得到結論。o(list1.len + list2.len),空間複雜度o(1)。
(4)其中乙個首尾相接
將其中乙個首尾相接,遍歷另乙個鍊錶,如果能到達第乙個鍊錶的首部,則表明相交。o(list1.len + list2.len),空間複雜度o(1)。
(5)計算相差的長度找第乙個相交節點
分別遍歷兩個鍊錶,記錄長度(若已知則不需此步),短鍊表從頭結點開始,長鍊表從第| list1.len - list2.len | 個節點開始,依次遍歷並比較,相等的第乙個節點則為相交的第乙個節點。也可以使用hash法如(2)所示。
判斷兩個單鏈表是否相交
方法一 直接法 直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...
判斷兩個單鏈表是否相交
判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 兩個鍊錶都不存在環 比較好的方法有兩個 一 將其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個點。二 如果兩個鍊錶相交,那個兩個鍊錶從相交點到鍊錶結束都是相同的節點,我們可以先遍歷...
兩個單鏈表判斷是否相交
開篇借他的一張圖 或許我們看到這個題目的時候,馬上就能想到這張圖,並且以為很簡單,因為只要是相交,最後乙個節點一定是相同的,只要將兩個單鏈表都遍歷到最後乙個元素,看看是不是相同就行了。如果這道題真的這麼簡單那也沒必要單獨拎出來講了,它其實是比較難的一道題,難就難在它的相交,可以是上面那樣的相交,但也...