给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
# --*-- coding:utf-8 --*--
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
return str(self.val)
class Solution(object):
def addTwoNumbers(self, list1, list2):
'''
:param list1:
:param list2:
:return:
'''
ret = ListNode(0)
ret_list = ret
# 进位标志,逆序排列
carry = 0
while list1 or list2:
# 位数不够,补0
list1_val = list1.val if list1 else 0
list2_val = list2.val if list2 else 0
addNum = list1_val + list2_val + carry
if addNum < 10:
ret_list.next = ListNode(addNum)
carry = 0
else:
carry = addNum // 10
ret_list.next = ListNode(addNum % 10)
ret_list = ret_list.next
list1 = list1.next if list1 else None
list2 = list2.next if list2 else None
if carry > 0:
# 最后要是还有进位,需要也计算
ret_list.next = ListNode(carry)
return ret.next
if __name__ == "__main__":
list1 = [2, 4, 3]
list2 = [5, 6]
l1 = ListNode(0)
l2 = ListNode(0)
list1_copy = l1
list2_copy = l2
for index in list1:
list1_copy.next = ListNode(index)
list1_copy = list1_copy.next
for index in list2:
list2_copy.next = ListNode(index)
list2_copy = list2_copy.next
solution = Solution()
# print (list1_copy.__repr__())
# print (list2_copy.__repr__())
print (solution.addTwoNumbers(l1.next, l2.next))