兩個鍊錶的第乙個公共結點

2021-08-17 07:42:14 字數 568 閱讀 5381

輸入兩個鍊錶,找出它們的第乙個公共結點。

設兩個鍊錶公共的長度為s,鍊錶1的長度為m+s,鍊錶2的長度為n+s。兩個移動指標分別從兩個鍊錶開始移動:

p1:  鍊錶1頭部->走到尾部->鍊錶2頭部 ->公共結點

p2:  鍊錶2頭部->走到尾部->鍊錶1頭部 ->公共結點

p1走的步數為m+s+n,p2走的步數為n+s+m

listnode* findfirstcommonnode( listnode* phead1, listnode* phead2) 

//這道題需要注意的細節:

//1、p1、p2需要遍歷每個節點,且每個節點都需要經過while中的比較

//2、p1、p2指向null時,也需要經過while中的比較,這種情況是兩個鍊錶沒有交集的情況

while(p1 != p2)

return p1;

}

遍歷兩個鍊錶,獲取長度為m、n;讓指向長鍊表的指標先走|m-n|步,然後另乙個指標出發;如有有公共結點,兩個指標會在公共結點相遇;如果沒有,兩個指標都指向null

兩個鍊錶的第乙個公共結點

思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...

兩個鍊錶的第乙個公共結點

題目 輸入兩個鍊錶,找出他們的第乙個公共結點。方法1 分別把兩個鍊錶的節點放入兩個棧裡,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,接下來比較兩個棧頂的結點是否相同。如果相同,則把棧頂彈出接著比較下乙個棧頂,直到找到最後乙個相同的結點。時間和空間複雜度都是o m n 方法2 先遍歷兩個鍊錶得到它們的長度...

兩個鍊錶的第乙個公共結點

輸入兩個鍊錶,找出它們的第乙個公共結點。分析 如果兩個單向鍊錶有公共的結點,那麼這兩個鍊錶從某乙個結點開始,他們的next結點都指向同乙個結點,但由於是單向鍊錶的結點,每個結點都只有乙個next結點,因此從第乙個公共結點開始,之後他們所有結點都是重合的,不可能出現分支。public listnode...