請寫乙個程式,找到兩個單鏈表最開始的交叉節點。
下列兩個鍊錶:
a: a1 → a2
↘c1 → c2 → c3
↗
b: b1 → b2 → b3
在節點 c1 開始交叉。
需滿足 o(n) 時間複雜度,且僅用 o(1) 記憶體。
#第一步:得到a,b的長度,和a,b的最後乙個節點enda, endb
#第二步:對enda,endb進行判斷,如果enda不等於endb,則兩個鍊錶沒有相交的部分,否則對lena和lenb進行判斷,對長的鍊錶移動|lena-lenb|
#第三步:兩個長度相等的鍊錶一起走,當兩個鍊錶第一次相遇時,就到了最開始的交叉點
"""
definition for singly-linked list.
class listnode:
def __init__(self, x):
self.val = x
self.next = none
"""class solution:
"""@param: heada: the first list
@param: headb: the second list
@return: a listnode
"""def getintersectionnode(self, heada, headb):
# write your code here
if heada is none or headb is none:
return none
cura, curb = heada, headb
#第一步:得到a,b的長度,和a,b的最後乙個節點enda, endb
lena, lenb = 1, 1
while cura.next:
lena += 1
cura = cura.next
while curb.next:
lenb += 1
curb = curb.next
#第二步:對enda,endb進行判斷,如果enda不等於endb,則兩個鍊錶沒有相交的部分,否則對lena和lenb進行判斷,對長的鍊錶移動|lena-lenb|
if cura != curb:
return none
cura, curb = heada, headb
if lena-lenb > 0:
for i in range(lena-lenb):
cura = cura.next
else:
for i in range(lenb-lena):
curb = curb.next
#第三步:兩個長度相等的鍊錶一起走,當兩個鍊錶第一次相遇時,就到了最開始的交叉點
while cura != curb:
cura = cura.next
curb = curb.next
return cura
LintCode 380 兩個鍊錶的交叉
請寫乙個程式,找到兩個單鏈表最開始的交叉節點。注意事項 樣例 下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始交叉。思路 1.鍊錶1從頭節點開始,走到最後乙個節點 不是結束 統計鍊錶1的長度記為len1,同時一記錄鍊錶1的最後乙個節點記為cura 2.鍊錶2從頭...
lintcode 380 兩個鍊錶的交叉
請寫乙個程式,找到兩個單鏈表最開始的交叉節點。樣例 樣例 1 輸入 a a1 a2 c1 c2 c3 b b1 b2 b3 輸出 c1 解釋 在節點 c1 開始交叉。樣例 2 輸入 intersected at 61 2 3 4 5 6 7 8 9 10 11 12 13 null6 7 8 9 1...
兩個整數相除 LintCode
將兩個整數相除,要求不使用乘法 除法和 mod 運算子。樣例 給定被除數 100 除數 9,返回 11。思想 利用位操作來擴大除數的值,被除數不斷減去除數,直至被除數小於除數。ifndef c414 h define c414 h include using namespace std class ...