思路
假設兩個鍊錶是單鏈表。那麼公共節點之後的鍊錶一定是重合的,也就是說,兩個鍊錶的有一節尾巴是一樣的。
解決上述問題的方法就是,先求出兩個鍊錶的長度,分別是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個指標併排前...