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

2021-10-03 08:42:15 字數 2181 閱讀 8285

思路:

鍊錶的長度不一定相同,如果出現了某乙個公共結點,那麼這個公共結點之後倘若還有結點,那麼後面的結點肯定相同,因為只是單鏈表,next相同。

第一種比較簡單的做法是,兩個鍊錶l1、l2連起來,乙個在前乙個在後。就有l1-l2,l2-l1兩個復合鍊錶。由於此時長度相同了,倘若有相同的結點,從公共結點開始肯定一樣。

class

solution

:

def findfirstcommonnode

(self, phead1, phead2)

: p = phead1

q = phead2

while p != q :

p = p.next if p != none else phead2

q = q.next if q != none else phead1

return p

也可先走過超出的結點數,再一起走:易理解!

class

solution

(object):

defgetintersectionnode

(self, heada, headb)

: counta =

0 countb =0if

not heada:

return

none

ifnot headb:

return

none

head1 = heada

head2 = headb

while head1.

next

: head1 = head1.

next

counta +=

1while head2.

next

: head2 = head2.

next

countb +=

1 dif =

abs(counta - countb)

# 算出之間的相差數

head1 = heada

head2 = headb

if counta > countb:

for i in

range

(dif)

: head1 = head1.

next

else

:for i in

range

(dif)

: head2 = head2.

next

while head1 != head2 and head1 !=

none

: head1 = head1.

next

head2 = head2.

next

return head1

第二種做法是牛客網也通過了,但是我覺得不太對。通過先把第乙個鍊錶裡面的每乙個結點的val儲存在陣列l1中,然後依次將第二個煉表裡的結點的val與陣列比較,如果有相同的,說明就是公共結點。 並且時間複雜度四o(n*n)。

class

solution

: def findfirstcommonnode

(self, phead1, phead2)

:# write code here

list1 =

list2 =

node1 = phead1

node2 = phead2

while node1:

list1.

(node1.val)

node1 = node1.next

while node2:

if node2.val in list1:

return node2

else

: node2 = node2.next

但是,我個人覺得可能有多個結點裡的val相同,所以如果這樣就不對了。如果是我理解不對,歡迎指正。

第三種方法可能比較麻煩,是我自己想的。就是先通過鍊錶反轉,依次進行比較,若有公共結點,最後乙個公共結點就是原來鍊錶的第乙個結點。之所以原來的鍊錶不能直接比較是因為兩個鍊錶的長度不一定相同,所以依次取next不可行。

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

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

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

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

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

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