開篇借他的一張圖:
或許我們看到這個題目的時候,馬上就能想到這張圖,並且以為很簡單,因為只要是相交,最後乙個節點一定是相同的,只要將兩個單鏈表都遍歷到最後乙個元素,看看是不是相同就行了。
如果這道題真的這麼簡單那也沒必要單獨拎出來講了,它其實是比較難的一道題,難就難在它的相交,可以是上面那樣的相交,但也可以是帶環的相交!
再借一張圖
喏,這下咱根本遍歷不到鍊錶尾了,咋辦?
這下這道題就變成了另外一道題了,即:如果單鏈表有環,如何找到這個環的入口!
因為我們只要找到他們的入口點,即a點和b點,隨便從乙個出發開始遍歷,如果在回到起點前找到了對方,那麼肯定就是相交的,否則就沒有。
關於找到單鏈表有環時如何找到入口的這個問題,請看這篇部落格:
判斷兩個單鏈表是否相交
首先要搞清楚單鏈表相交的概念和特點 指的是他們存在完全重合的部分,不是交叉到乙個點 不存在這種情況,可以想想為什麼 判斷其是否相交的方法有以下幾種。1 最傳統方法 雙重迴圈,依次查詢,是否有位址相同的節點,時間複雜度o list1.len list2.len 空間複雜度o 1 2 hash法 先遍歷...
判斷兩個單鏈表是否相交
方法一 直接法 直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...
判斷兩個單鏈表是否相交
判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 兩個鍊錶都不存在環 比較好的方法有兩個 一 將其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個點。二 如果兩個鍊錶相交,那個兩個鍊錶從相交點到鍊錶結束都是相同的節點,我們可以先遍歷...