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

2021-10-01 22:57:44 字數 2331 閱讀 5401

#思路1:先順序遍歷第乙個鍊錶的結點,每遍歷到乙個結點時候,在第二個鍊錶上順序遍歷每個結點。如果在第二個鍊錶上有和第乙個鍊錶相同的結點,則找到了公共結點。複雜度o(mn)

#思路2:使用輔助棧,分別把兩個鍊錶放入到兩個棧中,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,在比較棧頂元素是否相同。如果相同則彈出棧頂元素,接著比較下乙個棧頂,直到找到最後乙個相同的結點。定義了輔助棧用空間來換取時間。複雜度o(m+n)

class

listnode

(object):

def__init__

(self,x)

: self.val=x

self.

next

=none

node1 = listnode(1)

node1.

next

= listnode(2)

node1.

next

.next

= listnode(3)

node1.

next

.next

.next

= listnode(4)

node1.

next

.next

.next

.next

= listnode(5)

node2 = listnode(8)

node2.

next

= listnode(6)

node2.

next

.next

= listnode(4)

node2.

next

.next

.next

= listnode(5)

deffindfirstcommentnode

(phead1, phead2)

: stack1 =

stack2 =

while phead1:

phead1 = phead1.

next

while phead2:

phead2 = phead2.

next

first_commentnode =

none

while stack1 and stack2 and stack1[-1

].val == stack2[-1

].val:

first_commentnode = stack1.pop(

) stack2.pop(

)return first_commentnode

# print('第乙個公共結點',findfirstcommentnode(node1,node2).val)

#思路3:先遍歷兩個鍊錶,得到鍊錶的長度以及長的鍊錶比短的鍊錶多幾個結點,接著第二次遍歷的時候,在較長的鍊錶上先走多的結點數,接著在同時遍歷兩個鍊錶,找到第乙個相同結點就是他們的公共結點。這樣不需要空間複雜度o(m+n)

defgetlistlength

(phead)

: length =

0while phead:

length+=

1 phead = phead.

next

return length

deffindfirstcommentnode2

(phead1, phead2)

: length1 = getlistlength(node1)

length2 = getlistlength(node2)

len_diff =

abs(length1-length2)

longhead = phead1

shorthead = phead2

if length1 < length2:

longhead = phead2

shorthead = phead1

#先在長鍊表上走幾步,在同時遍歷兩個鍊錶

for i in

range

(len_diff)

: longhead = longhead.

next

while shorthead and longhead and shorthead.val != longhead.val:

shorthead = shorthead.

next

longhead = longhead.

next

return shorthead

# print(findfirstcommentnode2(node1,node2).val)

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

思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...

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

題目 輸入兩個鍊錶,找出他們的第乙個公共結點。方法1 分別把兩個鍊錶的節點放入兩個棧裡,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,接下來比較兩個棧頂的結點是否相同。如果相同,則把棧頂彈出接著比較下乙個棧頂,直到找到最後乙個相同的結點。時間和空間複雜度都是o m n 方法2 先遍歷兩個鍊錶得到它們的長度...

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

輸入兩個鍊錶,找出它們的第乙個公共結點。分析 如果兩個單向鍊錶有公共的結點,那麼這兩個鍊錶從某乙個結點開始,他們的next結點都指向同乙個結點,但由於是單向鍊錶的結點,每個結點都只有乙個next結點,因此從第乙個公共結點開始,之後他們所有結點都是重合的,不可能出現分支。public listnode...