劍指offer 兩個鍊錶的第乙個公共節點

2021-10-03 22:12:56 字數 1653 閱讀 2804

題目描述

輸入兩個鍊錶,找出它們的第乙個公共結點。(注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的)

解答如下:

環境: python 2.7.3

1.本題設定兩個指標,p1指向phead1,p2指向phead2,然後讓它們同時像後移動,如下圖,當p1指向none時,開始向後移動p2,這樣就可以統計兩指標間距,其實也就是兩鍊錶的長度差,如下圖k=2。(如果兩者同時指向none,那麼它們間距為0,也就是兩鍊錶一樣長,那麼就可以直接進入下一步,不用先移動某個指標了。)

2.再讓兩指標同時指向表頭,這時讓長的鍊錶的臨時指標p2先後移k步,這樣兩臨時指標到表尾的距離相同,再同時向後移動兩指標,它們相遇的地方就是兩鍊錶公共節點。

演算法我沒有做精簡優化,讀者可以自行優化,基本思想是對的。

class

solution

:def

findfirstcommonnode

(self, phead1, phead2)

:# write code here

if phead1 ==

none

or phead2 ==

none

:return

none

p1 = phead1

p2 = phead2

while p1 and p2:

p1 = p1.

next

p2 = p2.

next

count =

0if p1 ==

none

and p2 !=

none

:while p2 !=

none

: p2 = p2.

next

count +=

1 p1 = phead1

p2 = phead2

for i in

range

(count)

: p2 = p2.

next

if p1 !=

none

and p2 ==

none

:while p1 !=

none

: p1 = p1.

next

count +=

1 p1 = phead1

p2 = phead2

for i in

range

(count)

: p1 = p1.

next

if p1 ==

none

and p2 ==

none

:return phead1

while p1 != p2:

p1 = p1.

next

p2 = p2.

next

return p1

劍指offer 兩個鍊錶第乙個公共結點

題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...

劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)

輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...

劍指offer 兩個鍊錶的第乙個公共節點

題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...