牛客網 兩個鍊錶的第乙個公共結點

2021-07-07 02:44:13 字數 825 閱讀 9762

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

我們先把問題簡化:如何判斷兩個單向鍊錶有沒有公共結點?前面已經提到,如果兩個鍊錶有乙個公共結點,那麼該公共結點之後的所有結點都是重合的。那麼,它們的最後乙個結點必然是重合的。因此,我們判斷兩個鍊錶是不是有重合的部分,只要分別遍歷兩個鍊錶到最後乙個結點。如果兩個尾結點是一樣的,說明它們重合;否則兩個鍊錶沒有公共的結點。

在上面的思路中,順序遍歷兩個鍊錶到尾結點的時候,我們不能保證在兩個鍊錶上同時到達尾結點。這是因為兩個鍊錶長度不一定一樣。但我們假設乙個鍊錶比另乙個長

l個結點,我們先在長的鍊錶上遍歷

l個結點,之後再同步遍歷兩個鍊錶,這個時候我們就能保證兩個鍊錶同時到達尾節點了。由於兩個鍊錶從第乙個公共結點開始到鍊錶的尾結點,這一部分是重合的。因此,它們肯定也是同時到達第一公共結點的。於是在遍歷中,第乙個相同的結點就是第乙個公共的結點。

在這個思路中,我們先要分別遍歷兩個鍊錶得到它們的長度,並求出兩個鍊錶的長度之差。在長的鍊錶上先遍歷若干次之後,再同步遍歷兩個鍊錶,直到找到相同的結點,或者一直到鍊錶結束。此時,如果第乙個鍊錶的長度為

m,第二個鍊錶的長度為

n,該方法的時間複雜度為

o(m+n)。

/*

public class listnode

}*/public class solution

else

while (phead1!=phead2)

return phead1;

}public int getlength(listnode phead)

return x;

}}

牛客網刷題 兩個鍊錶的第乙個公共結點

程式設計連線 題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。題目解析 1 比較兩者的長度,長的先走,之後一起走,走到兩個相同的時候即是第乙個公共結點 2 兩個指標分別指向這兩個結點,不同的時候,則往前走,相同則停。1 先求長度 class solution for int i 0 iwhile ...

兩個鍊錶的第乙個公共結點 牛客offer

題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。題目分析 只是資料域相同不是公共節點。公共結點代表該節點在兩個鍊錶中的資料域和指標域都是相同的,這意味著從該公共節點開始,後面的結點都是兩個鍊錶共有的,如圖 解題思路 思路1 從正序比較的角度來考慮 觀察上圖,鍊錶1長度大於鍊錶2,那麼公共結點絕不可...

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

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