兩個鍊錶的第乙個公共節點(兩種解法)

2021-09-02 20:30:12 字數 2121 閱讀 2669

題目描述

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

使用棧,將兩個鍊錶的node儲存在棧中,因為如果有公共節點說明next相同,則後面的節點都是相同的

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

findfirstcommonnode

(self, phead1, phead2)

:# write code here

stack1, stack2 =

,[]if phead1 ==

none

or phead2 ==

none

:return

none

while phead1:

phead1 = phead1.

next

while phead2:

phead2 = phead2.

next

print

(stack1, stack2)

while

true

: pop1 = stack1.pop(

) pop2 = stack2.pop(

)print

(pop1, pop2)

if pop1 != pop2:

return

none

if stack1 ==

or stack2 ==

or stack1[

len(stack1)-1

]!= stack2[

len(stack2)-1

]:return pop1

占用記憶體:5752k

首先算出兩個鍊錶的長度,算出長度差值之後,長的鍊錶先向後遍歷這個差值,然後同步遍歷。第乙個相同的node就是解

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

findfirstcommonnode

(self, phead1, phead2)

:if phead1 ==

none

or phead2 ==

none

:return

none

length1, length2 =0,

0 pnode1, pnode2 = phead1, phead2

while pnode1:

length1 +=

1 pnode1 = pnode1.

next

while pnode2:

length2 +=

1 pnode2 = pnode2.

next

if length2 >= length1:

differlength = length2 - length1

while differlength:

phead2 = phead2.

next

differlength -=

1else

: differlength = length1 - length2

while differlength:

phead1 = phead1.

next

differlength -=

1while phead1 != phead2:

phead1 = phead1.

next

phead2 = phead2.

next

return phead1

占用記憶體:5724k

兩個鍊錶第乙個公共節點

先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...

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

輸入兩個鍊錶,找出它們的第乙個公共的節點。碰到這種題的時候千萬不要用挨個遍歷的方法,時間複雜度高 對於兩個有相同節點的鍊錶的形狀一定是y。而不是x。然後還可能乙個鍊錶長乙個鍊錶短,我們可以求出差值,然後讓長鍊表先走差值的長度,然後在挨個比較就可以了。這樣時間複雜度就小很多了 劍指offer 名企面試...

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

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 先遍歷兩個鍊錶得到它們的長度,求出長鍊錶比短鍊錶多幾個 第二次遍歷,在長鍊表上先走若干步,接著同時在兩個鍊錶上遍歷,找到的第乙個相同的結點就是它們的第乙個公共結點。public class listnode public listnode find...