問題:輸入兩個鍊錶,找出他們的第乙個公共結點
思考:鍊錶的公共結點意味著該結點的value值以及next相同,則兩個鍊錶有相同的字尾。
兩種方式:1.分別遍歷兩個鍊錶,計算長度,計算鍊錶差值,長鍊表先走差值個,短鍊表開始走,比較兩個鍊錶的字尾。2.不計算長度,同時遍歷兩個鍊錶,當鍊表中的結點為空時交換煉表頭指標,追趕,當有公共結點時跳出迴圈。
這裡給出方法2**:
1#-*- coding:utf-8 -*-2#
class listnode:3#
def __init__(self, x):4#
self.val = x5#
self.next = none
6class
solution:
7def
findfirstcommonnode(self, phead1, phead2):8#
write code here
9 p1 =phead1
10 p2 =phead2
11while p1 !=p2:
12if p1 ==none :
13 p1 =phead2
14else
:15 p1 =p1.next
16if p2 ==none :
17 p2 =phead1
18else
:19 p2 =p2.next
20return p1
兩個鍊錶的第乙個公共結點
思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...
兩個鍊錶的第乙個公共結點
題目 輸入兩個鍊錶,找出他們的第乙個公共結點。方法1 分別把兩個鍊錶的節點放入兩個棧裡,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,接下來比較兩個棧頂的結點是否相同。如果相同,則把棧頂彈出接著比較下乙個棧頂,直到找到最後乙個相同的結點。時間和空間複雜度都是o m n 方法2 先遍歷兩個鍊錶得到它們的長度...
兩個鍊錶的第乙個公共結點
輸入兩個鍊錶,找出它們的第乙個公共結點。分析 如果兩個單向鍊錶有公共的結點,那麼這兩個鍊錶從某乙個結點開始,他們的next結點都指向同乙個結點,但由於是單向鍊錶的結點,每個結點都只有乙個next結點,因此從第乙個公共結點開始,之後他們所有結點都是重合的,不可能出現分支。public listnode...