判斷兩個單鏈表是否相交

2021-07-25 19:34:18 字數 854 閱讀 8941

**
方法一:直接法

直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o(len1*len2),耗時很大

方法二:利用計數

如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點;而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每個節點的位址查詢hash表,如果它在hash表中出現,則說明兩個鍊錶有共 同的結點。這個方法的時間複雜度為:o(max(len1+len2);但同時還得增加o(len1)的儲存空間儲存雜湊表。這樣減少了時間複雜度,增加 了儲存空間。

以鍊錶節點位址為值,遍歷第乙個鍊錶,使用hash儲存所有節點位址值,結束條件為到最後乙個節點(無環)或hash中該位址值已經存在(有環)。

再遍歷第二個鍊錶,判斷節點位址值是否已經存在於上面建立的hash表中。

這個方面可以解決題目中的所有情況,時間複雜度為o(m+n),m和n分別是兩個鍊錶中節點數量。由於節點位址指標就是乙個整型,假設鍊錶都是在堆中動態建立的,可以使用堆的起始位址作為偏移量,以位址減去這個偏移量作為hash函式

方法三兩個沒有環的鍊錶相交於一節點,則在這個節點之後的所有結點都是兩個鍊錶所共有的。如果它們相交,則最後乙個結點一定是共有的,則只需要判斷最後乙個結點是否相同即可。時間複雜度為o(len1+len2),因為

找交點,m需要遍歷完,n也需要遍歷完。對於相交的第乙個結點,則可求出兩個鍊錶的長度,然後用長的減去短的得到乙個差值 k,然後讓長的鍊錶先遍歷k個結點,然後兩個鍊錶再開始比較。還可以這樣:其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個。

判斷兩個單鏈表是否相交

首先要搞清楚單鏈表相交的概念和特點 指的是他們存在完全重合的部分,不是交叉到乙個點 不存在這種情況,可以想想為什麼 判斷其是否相交的方法有以下幾種。1 最傳統方法 雙重迴圈,依次查詢,是否有位址相同的節點,時間複雜度o list1.len list2.len 空間複雜度o 1 2 hash法 先遍歷...

判斷兩個單鏈表是否相交

判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 兩個鍊錶都不存在環 比較好的方法有兩個 一 將其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個點。二 如果兩個鍊錶相交,那個兩個鍊錶從相交點到鍊錶結束都是相同的節點,我們可以先遍歷...

兩個單鏈表判斷是否相交

開篇借他的一張圖 或許我們看到這個題目的時候,馬上就能想到這張圖,並且以為很簡單,因為只要是相交,最後乙個節點一定是相同的,只要將兩個單鏈表都遍歷到最後乙個元素,看看是不是相同就行了。如果這道題真的這麼簡單那也沒必要單獨拎出來講了,它其實是比較難的一道題,難就難在它的相交,可以是上面那樣的相交,但也...