題目:輸入兩個鍊錶,找出它們的第乙個公共結點。
分析:看到題目我們會想到最簡單的一種方法,就是從頭開始對兩個鍊錶進行遍歷,對每一對結點進行比較,直到返回相同的結點,但是這種方法的時間複雜度相當高,如果鍊錶的長度分別為m、n,那麼時間複雜度為o(mn),這顯然是很浪費資源的,在面試中也是不可取的。所以我們開始考慮第二種方法:如果是將鍊錶從末尾向頭部進行比較的話,那麼可以有效降低時間複雜度,使用棧就能很好地解決這個問題,因為棧的先入後出的特點,使用棧就能解決這個問題,我們可以將每個結點先入棧,然後再出站進行對比,這樣的話就能很好地解決這個問題。但是在這裡我要使用第三種方法來解決這個問題,我們首先先來觀察一下這個雙鏈表的結構。
我們可以先求出兩個鍊錶的大小,然後將較長的鍊錶先去掉多餘的那一部分,然後兩個鍊錶再開始比較,這樣的話時間複雜度為o(m+n),這是一般面試可以接受的一種演算法
public class findfirstcommonnode
return length;
} public node findfirstcommonnode(node node1,node node2)
else
//先在長鍊表上走幾步,再對兩個鍊錶進行比較
for(int i=0;i
劍指offer 兩個鍊錶第乙個公共結點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...
劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)
輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...
劍指offer 兩個鍊錶的第乙個公共節點
題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...