兩個單鏈表相交,求開始相交的點

2021-09-11 16:46:13 字數 568 閱讀 5190

這題如果求兩個鍊錶是否相交,或者求相交的終點好求,要求開始相交的點,不好求。

剛開始我的思路一直停留再相交的終點做文章,比如,

1)知道終點,就知道終點的上乙個點,判斷它是不是,再找上上乙個點,以此類推。。。可惜這是個單鏈表,不能逆向遍歷。

使用這種辦法,就需要遍歷n遍,效率太太低。

2)終點的next指標,只想首指標,這樣找。。。

後面想了很久,想到了方法。

先遍歷兩個鍊錶,求得它們的長度,n, m,    長度長得鍊錶先走 |n-m| 步,再同時走,沒走一步都看指標是否相等,相等則為首次相交得點,跳出迴圈。

list* find first(list* l1, list*l2)

p = l2;

while( p )

list* p1 = l1;

list* p2 = l2;

int k = 0;

if(len1 > len2)

}else if(len1 < len2)

}while(p1)

return null;

}

兩個單鏈表相交問題

關於兩個鍊錶相交,很容易遷移到好多地方,比如 1.找出兩個鍊錶相交的節點 2.判斷單個鍊錶是否有環等 3.二叉樹當存在父指標的時候,求樹中兩個節點的最近公共祖先 看乙個圖 一下只給出相當一部分思想 方法一 將兩個鍊錶的節點進行hash操作,然後判斷出節點,這種想法是可以的。方法二 當然採用暴力的方法...

兩個單鏈表相交的系列問題

在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o n m 額外 空間複雜...

找到兩個單鏈表相交的起始節點20201212

2.解法 鍊錶相加 1ms 41.4mb 編寫乙個程式,找到兩個單鏈表相交的起始節點。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。相交的概念,不是兩條直線相交與乙個焦點 ...