判斷兩個鍊錶是否交叉,並求出交叉點

2021-05-09 16:39:33 字數 436 閱讀 4551

有兩個單向鍊錶,表頭pheader1,pheader2,請寫乙個函式判斷這兩個鍊錶是否有交叉.如果有交叉,給出交叉點.程式不能改變鍊錶的內容,可以使用額外的空間,時間複雜度盡量小,最好給出兩種解.(雙重迴圈的解由於時間複雜度高,不算正解).

基本思想:如果兩個鍊錶交叉,那麼這兩個鍊錶在交叉點之後的節點是完全相同的!!

因此可以用一下的演算法判斷兩個鍊錶是否交叉

1. 分別得到兩個鍊錶的最後乙個節點,以及鍊錶的長度.

2. 如果2個鍊錶的最後乙個節點位址相同,則有交叉,否則執行3

3. 假設兩個鍊錶的長度分別是m和n,且m>=n,那麼移動長的那個鍊錶,先移動m-n個節點,是長鍊錶與短鍊錶在末端對齊,然後從對其的節點開始比較兩個鍊錶,如果不相等,就都向後移動一格.(注意這裡是兩個鍊錶的指標同時向後移動)直到相等,相等的節點就是交叉點.

4. 時間複雜度o(n+m).

兩個鍊錶的交叉

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。注意事項 樣例下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始交叉。需滿足 o n 時間複雜度,且僅用 o 1 記憶體。這裡主要有兩個思路 方法一 對於僅判斷相交不相交的話 判斷最後乙個節點是否相同的辦法並不慢,如果...

判斷兩個鍊錶是否存在交點 並求出位置

private static class node 省略get set public static node checknodeintersect node node1,node node2 int n1num 0 int n2num 0 int subtract 0 node n1 node1 n...

lintcode 兩個鍊錶的交叉

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。如果兩個鍊錶沒有交叉,返回null。在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始交叉。需滿足 o n 時間複雜度,且僅用 o 1 記憶體。...