基本概念:兩個鍊錶是單鏈表,如果兩個鍊錶有公共節點,那麼這兩個鍊錶從某一節點開始,它們都指向同乙個節點,之後它們所有的節點都是重合的,不可能再出現分叉。所以拓撲形狀看起來是y型。
演算法思想:首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾個節點。在第二次遍歷的時候,先在較長的節點上走若干步,接著同時在兩個鍊錶上遍歷,找到的第乙個相同的節點就是它們的公共的節點。
public
class solution
for(int i = 0;i < lengthdif;i++)
while(plong != null && pshort != null && plong != pshort)
listnode pfirst = pshort;
return pfirst;
}private
intgetlength(listnode phead)
return length;
}}
兩個單鏈表的第乙個公共結點
方法1 由於是單鏈表,所以可以用乙個set儲存第乙個的節點,然後遍歷第二個鍊錶,尋找相同的節點,時間複雜度o mlogm 空間複雜度o max m,n listnode findfirstcommonnode listnode phead1,listnode phead2 while iter2 r...
兩個單鏈表的相交問題,第乙個公共結點
關於這個問題,有三種思路。第一種是最普通的思路,使用2層迴圈,第一層迴圈遍歷鍊錶a,在每次遍歷到乙個結點時,第二層迴圈遍歷鍊錶b看看有沒有一樣的結點,這個思路比較容易想,但是這個的思路的時間複雜度比較高,如果兩個鍊錶乙個長度m,乙個長度為n,時間複雜度就是o mn 第二種思路需要用到棧,還需要用到單...
兩個單鏈表的第乙個公共節點
題目 求兩個單鏈表的第乙個公共子節點。思路 我們可以先遍歷兩個單鏈表得到長度,然後求得兩個鍊錶長度的差值,然後讓長的那個鍊錶先走到差值長度位置,然後兩個鍊錶再同時遍歷,直到找到第乙個公共節點。struct listnode int getlistlength listnode head return...