class Solution:
def addTwoNumbers(self, l1, l2):
""" :type l1: ListNode :type l2: ListNode :rtype: ListNode """
# # 定義一個新聯表偽指針,用來指向頭指針,返回結果
# re = ListNode(0)
# # 定義一個可移動的指針,用來指向存儲兩個數之和的位置
# r = re
# # 定義一個進位數的指針,用來存儲當兩數之和大於10的時候,
# carry = 0
# while(l1 or l2):
# # 如果l1 不等於null時,就取他的值,等於null時,就賦值0,保持兩個鏈表具有相同的位數
# x = l1.val if l1 else 0
# # 如果l2 不等於null時,就取他的值,等於null時,就賦值0,保持兩個鏈表具有相同的位數
# y = l2.val if l2 else 0
# # 將兩個鏈表的值,進行相加,並加上進位數
# s = carry+x+y
# # 計算進位數
# carry = s//10
# # 將求和數賦值給新鏈表的節點,
# # 注意這個時候不能直接將sum賦值給cur.next = sum。這時候會報類型不匹配。
# # 所以這個時候要創一個新的節點,將值賦予節點
# r.next=ListNode(s % 10)
# # 將新鏈表的節點後移
# r = r.next
# # 當鏈表l1不等於null的時候,將l1 的節點後移
# if(l1!=None):
# l1=l1.next
# # 當鏈表l2不等於null的時候,將l1 的節點後移
# if(l2!=None):
# l2=l2.next
# # 如果最後兩個數,相加的時候有進位數的時候,就將進位數,賦予鏈表的新節點。
# # 兩數相加最多小於20,所以的的值最大只能時1
# if(carry>0):
# r.next = ListNode(1)
# # 返回鏈表的頭節點
# return re.next
re = ListNode(0)
re_copy = re
carry = 0
while (l1 or l2):
x = l1.val if l1 else 0
y = l2.val if l2 else 0
sum = carry + x + y
carry = sum // 10
re_copy.next = ListNode(sum % 10)
re_copy = re_copy.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
if (carry > 0):
re_copy.next = ListNode(1)
return re.next