判斷兩個單鏈表是否相交

2021-08-26 11:18:15 字數 643 閱讀 3656

判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點(兩個鍊錶都不存在環)。

比較好的方法有兩個:

一、將其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個點。

二、如果兩個鍊錶相交,那個兩個鍊錶從相交點到鍊錶結束都是相同的節點,我們可以先遍歷乙個鍊錶,直到尾部,再遍歷另外乙個鍊錶,如果也可以走到同樣的結尾點,則兩個鍊錶相交。

這時我們記下兩個鍊錶length,再遍歷一次,長鍊表節點先出發前進(lengthmax-lengthmin)步,之後兩個鍊錶同時前進,每次一步,相遇的第一點即為兩個鍊錶相交的第乙個點。

注釋1設r為環長,則fast指標r/2內可以跑完一圈,若r為奇數,剛r步內fast會遍歷迴圈內所有點.剛r內一定會跟slow相遇.若r為偶數,r/2步內可令fast跟slow的最近距離為2或1(f追趕s).若為2,則

fast+2=slow

所以下一步時slow的位置是slow+1;而fast則為fast+2;

再下步slow+2,fast+4;

因為之前fast+2=slow,所以

slow-2+4=slow+2

又因為最近距離為1時,只要兩指標各走一步便相遇.

所以兩指標相遇.最大步數為s<=r/2+2(r>=4)

判斷兩個單鏈表是否相交

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

判斷兩個單鏈表是否相交

方法一 直接法 直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...

兩個單鏈表判斷是否相交

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