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

2021-08-26 20:50:16 字數 926 閱讀 8838

題目描述

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

公共結點是位址相同的兩個結點,也就是同乙個結點,由於是單向鍊錶,所有從公共結點之後兩鍊錶重合。

方式一(**繁瑣,易理解版):

先給定兩個指標使其能夠表示兩個鍊錶的頭結點(當前節點),首先讓兩個節點的長度保持一致,也就是確定好兩個鍊錶的長度length1,length2,使長度大的鍊錶先遍歷 |lenght1-lenght2| 個節點,讓兩個量表剩餘節點個數一致後,然後依次對比兩個鍊錶的節點,直到找出公共節點或者鍊錶走到尾部(未找到公共節點)為止

大神做法|:

假設兩個鍊錶公共長度為c,不公共的長度分別為a、b。 則兩個鍊錶長度分別為a+c,b+c。 設兩個指標,讓第乙個鍊錶走完之後,跳到第二個鍊錶開始走,共a+c+x1距離;同理第二個鍊錶走完後調到第乙個鍊錶開始走,走b+c+x2距離。

那麼兩個指標相遇時,由 a+c+x1 = b+c+x2,距離不為負,得x1=a,x2=b,所以最後兩個指標走的距離都是a+b+c,剛好在第乙個公共點相遇。

public

class solution

return n1;

}}

通俗解法:

/*

找出2個鍊錶的長度,然後讓長的先走兩個鍊錶的長度差,然後再一起走

(因為2個鍊錶用公共的尾部)

*/class solution else

while(phead1 != null)

return null;

}int findlistlenth(listnode *phead1)

listnode* walkstep(listnode *phead1, int step)

return phead1;

}};

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

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

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

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

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

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