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

2022-09-02 13:51:06 字數 1864 閱讀 2416

思路:分別建立兩個空堆疊stacka和stackb,heada、headb的節點分別依次存放入兩個堆疊中。採用堆疊後進先出的性質,從後往前對比元素,並賦值給res,直到遇上不同元素,或者其中乙個棧空了為止。

**

class solution:

def getintersectionnode(self, heada: listnode, headb: listnode) -> listnode:

stacka =

stackb =

while heada:

heada = heada.next

while headb:

headb = headb.next

res = none

while stacka and stackb:

nodea = stacka.pop()

nodeb = stackb.pop()

if nodea == nodeb:

res = nodea

if not stacka or not stackb:

return res

else:

return res

結果

執行用時 :176 ms, 在所有 python3 提交中擊敗了77.36%的使用者

記憶體消耗 :28.7 mb, 在所有 python3 提交中擊敗了100.00%的使用者

思路:先求出兩個鍊錶的長度lena和lenb,再讓長的鍊錶先走長度差的步數。開始遍歷列表,若不滿足heada != headb,跳出while迴圈,返回當前節點值;若鍊錶已經被遍歷完,說明兩個鍊錶中不存在相同值,返回none。

**

class solution:

def getintersectionnode(self, heada: listnode, headb: listnode) -> listnode:

lena = 0

lenb = 0

tempa = heada

tempb = headb

while heada:

lena += 1

heada = heada.next

while headb:

lenb += 1

headb = headb.next

heada = tempa

headb = tempb

if lena < lenb:

for i in range(lenb - lena):

headb = headb.next

while heada != headb and heada:

heada = heada.next

headb = headb.next

else:

for i in range(lena - lenb):

heada = heada.next

while heada != headb and heada:

heada = heada.next

headb = headb.next

if not heada:

return none

else:

return heada

結果

執行用時 :304 ms, 在所有 python3 提交中擊敗了7.12%>的使用者

記憶體消耗 :28.6 mb, 在所有 python3 提交中擊敗了100.00%的使用者

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

輸入兩個鍊錶,找出它們的第乙個公共結點。說明 應該是兩個單向鍊錶,成y字型,不會成x型,也不會成環。鍊錶只能從表頭單向訪問,可以利用棧的後進先出特性來實現,把兩個鍊錶壓入棧再彈出來,但是那樣需要兩個輔助棧,如果兩條鍊錶的長度分別是m和n,則需要m n個輔助棧空間,同時時間複雜度為o m n 使用兩個...

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

輸入兩個鍊錶,找出它們的第乙個公共節點。例 1 2 3 6 7 4 5 公共節點為6。遍歷鍊錶a,將每個節點存入乙個雜湊表。再遍歷鍊錶b,繼續向雜湊表內儲存,當出現衝突時,即找到了第乙個公共節點。時間複雜度 o m n 空間複雜度 o m n 遍歷鍊錶a,每個節點都在b中遍歷查詢,直到有乙個a中節點...

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

面試題52.兩個鍊錶的第乙個公共節點 難度簡單37 輸入兩個鍊錶,找出它們的第乙個公共節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 referen...