两数相加
题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。
如果我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路:
创建一个结果ListNode并初始化为0,接着判断已知的两个ListNode是否为空,两者不为空的时候,对应位置直接相加,并且如果有进位则carry置位,并做相应处理。当其中一个ListNode为空的时候,实际会对另一个非空的ListNode与carry之间进行相加处理。当两个ListNode都为空的时候,判断Carry的值,如果大于0,则继续新建一个结点。最后返回res的下一个结点,因为第一个结点上初始化为0的结点。
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
res = ListNode(0)
nowNode = res
carry = 0
while l1 != None or l2 != None:
if l1 != None:
num1 = l1.val
else:
num1 = 0
if l2 != None:
num2 = l2.val
else:
num2 = 0
newVal = num1 + num2 +carry
newNode = ListNode(newVal % 10)
nowNode.next = newNode
nowNode = newNode
carry = newVal // 10
if l1 != None: l1 = l1.next
if l2 != None: l2 = l2.next
if carry > 0:
nowNode.next = ListNode(carry)
return res.next