面試題五十二 兩個鍊錶的第乙個交點

2022-06-10 02:54:11 字數 568 閱讀 1183

方法一:暴力,遍歷a鍊錶每乙個節點的過程中,對b鍊錶進行檢查 o(ab)

方法二:因為題目中煉表是單向的,所以在第乙個重合點後,其他都相等,就是y型的。所以他們尾節點是相同的,因此就重後面開始,符合「先進後出的特點」,我們可以定義兩個棧,然後鍊錶進棧,在進行出棧比較;

方法三:先獲取兩個鍊錶的長度,如果長的長度比短的長m,則長先走m步後再一起走,開始比較

listnode findfrist( listnode a,listnode b)

listnode b1=b;

while(b1.next!=null

)

//長的先走k步

int k=b.length-a.length;

while(k<0)

while(k>0)

//同等長度·下開始比較直到找到交點直接返回

while(alength>0)

//沒有交點到最後就是null

return

null

; }

注意:如果將尾節點看成根節點,那麼就像是兩棵樹尋找共同祖先

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

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

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

面試題37 兩個鍊錶的第乙個公共結點 題目 輸入兩個鍊錶,找出他們的第乙個公共結點。從定義可以看出,這是單向鍊錶。如果有公共結點,之後他們的所有結點都是重合的,不可能分叉,拓撲形狀像乙個y而不是x。思路1 可以把兩個鍊錶的結點放入兩個棧,這樣兩個鍊錶的尾結點就是棧頂,接下來比較棧頂結點是否相同。直到...

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

題目 輸入兩個鍊錶,找出他們的第乙個公共結點。邊界條件及異常 有乙個為空 思路 方法一 用hash表來儲存乙個鍊錶的結點,然後順序遍歷另乙個鍊錶,看是否在hash表中有儲存值,有則是第一次出現的結點。時間複雜度 o n1 n2 空間複雜度 o n1 方法二 由於兩個鍊錶有公共結點的話,後面部分一定相...