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

2021-09-25 13:51:52 字數 1136 閱讀 7447

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

思路一:

1、先求出兩個鍊錶的長度差gap,讓比較長的鍊錶先向前遍歷gap個節點,然後兩個鍊錶同時向前遍歷,直到遇到相同的節點為止。時間複雜度:o(m+n);m和n分別為兩個鍊錶的長度。

/**

* 解法一:求得兩個鍊錶的長度差d,讓較長的鍊錶先走d步,然後兩個鍊錶再一起遍歷,時間複雜度o(m+n)

* @param phead1

* @param phead2

* @return

*/public static listnode findfirstcommonnode(listnode phead1, listnode phead2)

listnode p1=phead1;

listnode p2=phead2;

int p1length=0;

int p2length=0;

while (p1!=null)

while (p2!=null)

if(p1length>p2length)else

while (p1!=null)

return null;

}public static listnode walkstep(listnode phead, int step)

return phead;

}public static void main(string args)

思路二:如下圖;將鍊錶分為兩部分,則兩個鍊錶的長度分別為a+c,b+c;得到a+c+b=b+c+a(即鍊錶a遍歷結束後從鍊錶b開始遍歷,鍊錶b遍歷結束後從鍊錶a開始遍歷,當兩個鍊錶的指標相遇時,就是第乙個公共結點)

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

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

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

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

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

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