輸入兩個鍊錶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...