這題如果求兩個鍊錶是否相交,或者求相交的終點好求,要求開始相交的點,不好求。
剛開始我的思路一直停留再相交的終點做文章,比如,
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 記憶體。相交的概念,不是兩條直線相交與乙個焦點 ...