面試題37 兩個鍊錶的第乙個公共結點

2021-07-03 14:06:37 字數 755 閱讀 2899

/*

* 面試題37:兩個鍊錶的第乙個公共結點 題目:輸入兩個鍊錶,找出他們的第乙個公共結點。

* * 從定義可以看出,這是單向鍊錶。如果有公共結點,之後他們的所有結點都是重合的,不可能分叉,拓撲形狀像乙個y而不是x。

* 思路1:可以把兩個鍊錶的結點放入兩個棧,這樣兩個鍊錶的尾結點就是棧頂,接下來比較棧頂結點是否相同。

* 直到找到最後乙個相同的結點。空間複雜度和時間複雜度都是o(m+n).

* 思路2:首先遍歷兩個鍊錶得到它們的長度,得出哪個鍊錶較長,長幾個結點。第二次遍歷的時候,

* 較長的鍊錶先走若干步,接著同時遍歷兩個鍊錶,找到第乙個相同的結點就是第乙個公共結點。

* * 首先定義乙個返回鍊錶長度的方法

*/public static int getlistlength(node head)

return nlength;

} public static node getfirstmeetnode(node h1,node h2)

for(int i=0;iplistheadlong=plistheadlong.next;

while((plistheadlong!=null)&&(plistheadshort!=null)&&(plistheadlong!=plistheadshort))

node pfirstmeetnode=plistheadlong;

return pfirstmeetnode;

}

面試題37 兩個鍊錶的第乙個公共結點

題目 輸入兩個鍊錶,找出它們的第乙個公共節點。鍊錶的定義如下 struct listnode int m nkey listnode m pnext 演算法思路 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾個節點。在第二次遍歷的時候,先在較長的節點上走若干步,接...

面試題37 兩個鍊錶的第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。這一題我考慮的是,先分別求出每個鍊錶的長度,然後用乙個set收集所有的值。因為set中不允許有重複的值。那麼兩個鍊錶的長度和減去set的size就是公共鍊錶的長度,再從頭遍歷下,即可求得。演算法的複雜度是o m lgm n lgn m,n分別為鍊錶的長度...

面試題37 兩個鍊錶的第乙個公共結點

面試題37 兩個鍊錶的第乙個公共結點 輸入兩個鍊錶,找出它們的第乙個公共結點。package offer 面試題37 兩個鍊錶的第乙個公共結點 輸入兩個鍊錶,找出它們的第乙個公共結點。public class 37 linked common class solution37 while l2 nu...