鍊錶的第乙個公共節點python

2021-09-24 09:08:50 字數 1527 閱讀 6104

思路

假設兩個鍊錶是單鏈表。那麼公共節點之後的鍊錶一定是重合的,也就是說,兩個鍊錶的有一節尾巴是一樣的。

解決上述問題的方法就是,先求出兩個鍊錶的長度,分別是len1和len2,如果len1len2:

while len1-len2:

phead1 = phead1.next

len1 -= 1

elif len1用測試用例驗證了一下

if __name__ == '__main__':

list1=listnode(1)

list1.next=listnode(2)

list1.next.next=listnode(3)

list1.next.next.next=listnode(4)

list1.next.next.next.next=listnode(5)

list2=listnode(0)

list2.next=listnode(4)

list2.next.next=listnode(5)

answer=solution()

q=answer.findfirstcommonnode(list1,list2)

if q == none:

print("沒有")

else:

print(q.val)

得到的結果是

p=5 q=3

沒有

題目的本意是找到公共節點,這就意味著兩個節點是完全的相同,包括內容與位址,而==只能判斷內容是否相同,不在意具體位址儲存情況,但是is是兩個元素完全相同,包括內容與位址

很奇怪,雖然道理是這樣,但是我驗證的時候發現並不是這樣,講道理第乙個應該返回 true啊!!!

list1.next.next == list2

out[25]: false

list1.next.next is list2

out[26]: false

重新設計了測試用例,這次就對了

if __name__ == '__main__':

list1=listnode(1)

list1.next=listnode(2)

list1.next.next=listnode(3)

list1.next.next.next=listnode(4)

list1.next.next.next.next=listnode(5)

list2=listnode(0)

list2.next=list1.next.next

answer=solution()

q=answer.findfirstcommonnode(list1,list2)

if q == none:

print("沒有")

else:

print(q.val)

找出鍊錶的第乙個公共節點

62.找出鍊錶的第乙個公共結點。題目 兩個單向鍊錶,找出它們的第乙個公共結點 思路 1.暴力法 但時間複雜度太高 o n m 2.如果兩個鍊錶有公共節點,則從該公共節點起,後面的節點均為公共的,即這兩個鍊錶在第乙個公共節點交叉,然後形成乙個y字型,因為兩個鍊錶長度不一定一樣,所以可以先求得他們的長度...

兩個鍊錶第乙個公共節點

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

鍊錶 尋找2個鍊錶的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共結點。思路 由於從某個節點開始2個鍊錶相交,那麼之後的節點完全一樣 先求出2個連表長度 先使得長的鍊錶 先走差值的長度 然後2個指標併排前進,並判斷是否相等,若相等即為第乙個公共節點 需要注意 null的情況 class solution else 在2個指標併排前...