題目描述:輸入兩個鍊錶,找出它們的第乙個公共結點。
我們先看下邊這個圖:
對於單向鍊錶而言,從兩個單鏈表第乙個公共結點開始,之後它們的所有結點都是重合的,不可能再出現分叉。
對於題目,我們最簡單的想法就是在第乙個鍊錶上順序遍歷每個結點,每遍歷到乙個結點時,在第二個鍊錶上順序遍歷每個結點,
直到找到公共頂點,但是這樣的時間複雜度為o(mn)。實際上,我們上邊單鏈表的特點可以知道,可以採取這樣的一種解法:
先計算兩個鍊錶的長度len1,len2,然後長鍊表先走|len1-len2|(絕對值)步,然後從兩個鍊錶開始遍歷,比較兩邊的結點是否相等
這樣的話時間複雜度就只剩下o(m+n)
public class solution
}else
}while(current1!=current2)
return current1;
}public int lenoflist(listnode phead)
return count;}}
劍指offer面試題目 兩個鍊錶的第乙個公共節點
輸入兩個鍊錶,找出它們的第乙個公共結點。這個問題一種常想到的方法就是兩層迴圈遍歷,外層迴圈遍歷鍊錶a,對a中每個節點,遍歷鍊錶b,如果在b中找到,說明這個節點是第乙個公共節點,但是這樣的方法時間複雜為mn,一般是不允採用的。所以我們需要分析更深層次的問題,找到其中的規律,我們如果動手畫一下一般的鍊錶...
面試題37 兩個鍊錶的第乙個公共結點
題目 輸入兩個鍊錶,找出它們的第乙個公共節點。鍊錶的定義如下 struct listnode int m nkey listnode m pnext 演算法思路 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾個節點。在第二次遍歷的時候,先在較長的節點上走若干步,接...
面試題37 兩個鍊錶的第乙個公共結點
面試題37 兩個鍊錶的第乙個公共結點 題目 輸入兩個鍊錶,找出他們的第乙個公共結點。從定義可以看出,這是單向鍊錶。如果有公共結點,之後他們的所有結點都是重合的,不可能分叉,拓撲形狀像乙個y而不是x。思路1 可以把兩個鍊錶的結點放入兩個棧,這樣兩個鍊錶的尾結點就是棧頂,接下來比較棧頂結點是否相同。直到...