題目描述
給出兩個非空的鍊錶用來表示兩個非負的整數。具體**其中,它們各自的位數是按照逆序的方式儲存的,且它們的每個節點只能儲存一位數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以0開頭。
示例:
輸入:(7 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:2 -> 1 -> 8
原因:347 + 465 = 812
class
listnode
(object):
def__init__
(self, val=0,
next
=none):
self.val = val
self.
next
=next
class
solution
(object):
defaddtwonumbers
(self, l1, l2)
:"""
:type l1: listnode
:type l2: listnode
:rtype: listnode
"""# 建立節點值為none的頭節點,r和p指向頭節點,r用來返回答案,p用來遍歷
r = p = listnode(
none
)# s用來表示是否進製,初始化進製為0
s =0while l1 or l2 or s:
# 若l1或l2存在,則將l1的值與l2的值相加,若s為1,則下次加1
s +=
(l1.val if l1 else0)
+(l2.val if l2 else0)
# 將s取餘(個位)作為p的下乙個節點值
p.next
= listnode(s %10)
# s取模
s = s //
10# 向後遍歷
p = p.
next
# 若l1存在,則向後遍歷
l1 = l1.
next
if l1 else
none
l2 = l2.
next
if l2 else
none
# 返回 r 的下乙個節點, 因為 r 指向的是空的頭結點,
# 下乙個節點才是新建鍊錶的後序節點
return r.
next
defmain()
: s = solution(
) nums =
l1 =
list
(map
(int
,input()
.split())
) l2 =
list
(map
(int
,input()
.split())
) head1 = listnode(l1[0]
) head2 = listnode(l2[0]
) p1 = head1
p2 = head2
r1 = head1
r2 = head2
for i in l1[1:
]:p1.
next
= listnode(i)
p1 = p1.
next
for j in l2[1:
]:p2.
next
= listnode(j)
p2 = p2.
next
res = s.addtwonumbers(r1,r2)
while res:
res = res.
next
return nums
if __name__ ==
'__main__'
: result = main(
)print
(result)
力扣第二題兩數相加
題目如下所示 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 ...
力扣兩數相加
描述 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 definition for singl...
力扣 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...