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

2021-10-03 12:26:59 字數 1100 閱讀 6955

題目描述

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

參考思路

一、暴力法

尋找兩個鍊錶的公共結點,我們可以遍歷第乙個鏈結,然後根據第乙個鍊錶的元素遍歷第二個鍊錶,遇到第乙個公共結點則返回。時間複雜度o(mn),m,n分表為兩個鍊錶的長度。

/*

public class listnode

}*/public

class

solution

else

} phead1 = phead1.next;

p2 = phead2;

}return null;

}}

二、長度差法

兩個有序鍊錶,求公共結點,我們可以根據兩者的長度差,然後讓長的鍊錶先走若干步,然後同時遍歷兩個鍊錶,不相同則同時向前進,直到找到第乙個公共結點。(可以這樣做的原因是有序鍊錶第乙個公共結點之後的結點肯定相同,因此長度差就為第乙個公共結點前的長度差,讓較長的鍊錶先跑則節省了時間),時間複雜度o(m+n)。

/*

public class listnode

}*/public

class

solution

while

(phead2 != null)

int difflen = math.

abs(length1-length2);if

(length1>length2)

}else

}while

(p1 != p2)

return p1;

}}

三、堆疊倒尋法

可以用兩個堆疊去儲存兩個鍊錶的元素,根據堆疊先進後出的原則,可以從鍊錶尾部進行遍歷。因為兩個鍊錶從公共結點開始後面的都一致,因此可以直接比較棧頂元素,不相同則同時彈出,直到找到公共結點為止。時間複雜度o(m+n)。這邊**就不再累述。

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

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

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

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

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

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