l.add two numbers(leetcode 2)
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:
從兩煉表首元素遍歷,若其中乙個為空,返回另乙個;若兩個都非空,將對應元素想加,注意進製問題;若兩鍊錶長度不一致,注意較長鍊錶的加入到結果中,同樣注意進製問題。
**如下:
#定義鍊錶節點
class
listnode:
def__init__
(self, x):
self.val = x
self.next = none
class
solution:
defaddtwonumbers
(self, l1, l2):
""" :type l1: listnode
:type l2: listnode
:rtype: listnode
"""carray=0
#表示進製
answer=listnode(0) #存放結果的鍊錶
phead=answer #結果鍊錶的頭指標
#若其中乙個為空,返回另乙個
ifnot l1:
return l2
ifnot l2:
return l1
#若均不空,對應元素相加,取餘數
while l1 and l2 : #若兩個鍊錶均有對應元素
v=l1.val+l2.val+carray
carray=v//10
#商取整,用於記錄進製
v=v%10
#餘數 phead.next=listnode(v)
#三個鍊錶指標均後移
l1=l1.next
l2=l2.next
phead=phead.next
#較長鍊錶是l1
while l1:
v=l1.val+carray
carray=v//10
v=v%10
phead.next=listnode(v)
#兩鍊錶指標均後移
l1=l1.next
phead=phead.next
#較長鍊錶是l2
while l2 :
v=l2.val+carray
carray=v//10
v=v%10
phead.next=listnode(v)
#兩鍊錶指標均後移
l2=l2.next
phead=phead.next
#進製if carray==1:
phead.next=listnode(1)
return answer.next
#建立乙個鍊錶
list=listnode(9)
list.next=listnode(8)
#定義物件
s=solution()
#呼叫函式
result=s.addtwonumbers(list,listnode(5))
while result:
print(result.val)
result=result.next
演算法(鍊錶相關)
以下是鍊錶的一些基礎題目,但是通過這些題目的組合和解決問題的方法可以解決鍊錶的複雜問題,如k個為一組進行鍊錶翻轉就需要翻轉鍊錶的方法,整理基本題目如下方便複習。1.合併兩個有序鍊錶,合併後還是有序鍊錶 class solution elseelseelseelseelseelseelse 給頭節點乙...
演算法題 鍊錶相關
題目 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。解析 由於只輸入了需要刪除的節點node,因此無法獲取刪除節點node的前乙個節點pre,從而也就無法將前乙個節點pre指向刪除節點的下乙個節點nex 既然無法通過修改指標完成,那麼肯定要修改鍊錶節點的值...
鍊錶相關操作
include include using namespace std 鍊錶結構體 struct listnode 是否為空 bool isempty listnode list position是否是最後乙個 bool islast listnode position,listnode list ...