offer37兩個鍊錶的第乙個公共節點

2021-08-13 21:28:51 字數 615 閱讀 5846

輸入兩個鍊錶l1和l2

,找出它們的第乙個公共節點。

思路:單鏈表如果有公共節點,肯定為y型,從末尾掃瞄到頭可找出第乙個不相同的即可,l1和l2壓棧,從尾開始彈出,第乙個不相同的即為答案,時間複雜度o(m+n),需要額外空間複雜度o(m+n);

若知道兩個鍊錶長度,長的先走幾步,然後兩鍊錶同步向前,找出第乙個相同的節點,這種不需要額外空間,時間複雜度o(m+n),**如下

public class solution  else 

} public static listnode findfirstcommonnode(listnode l1, listnode l2)

for (int i = 0; i < diff; i++)

// 這裡判斷相同的條件是==,沒有複寫equals

while (longlist != null && shortlist != null && longlist != shortlist)

return longlist;

} public static int listnodelength(listnode head)

return n;

}}

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

package listtest.listintersection 查詢兩個鍊錶的第乙個交點 兩個有交點的鍊錶自交點結點開始到最後乙個結點都是相同的。如果能從最後乙個結點遍歷到最後乙個相同的結點則為交點。但是單鏈表只能從頭結點開始遍歷,所以我們要考慮兩個鍊錶的長度是不是一樣的。如果乙個鍊錶比另外乙個...

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

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 首先要明白一點 如果兩個單向鍊錶有公共結點,那麼這兩個鍊錶從某一結點開始,它們的next都指向同乙個結點,及公共結點一定出現在鍊錶的 尾部。兩種思路 第一種是將兩個鍊錶的結點放入棧中,我們依次比較棧頂元素,找出公共結點出現的最後乙個元素。第二種是將...

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

題目 輸入兩個鍊錶,找出它們的第乙個公共結點,鍊錶結點定義如下 先在長鍊表上走幾步,再同時在兩個鍊錶上遍歷 for int i 0 i nlengthdif i plistheadlong plistheadlong m pnext while plistheadlong null plisthea...