给定两个非空链表,表示两个非负的整数。
它们每位数字都按照逆序的方式存储,并且每个节点只存储一位数字。
将两个数相加,并以相同形式返回一个表示和的链表。
假设除了数字0之外,这两个数都不会以 0 开头。
例子:
984 + 65 = 1049
输入:l1 = [4,8,9], l2 = [5,6] 输出:[9,4,0,1]
方法1
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
head = cur = ListNode()
carry = 0
while l1 or l2:
l1_num = l1.val if l1 else 0
l2_num = l2.val if l2 else 0
sum = l1_num + l2_num + carry
cur.next = ListNode(sum % 10)
cur = cur.next
carry = sum // 10
if l1: l1 = l1.next
if l2: l2 = l2.next
if carry:
cur.next = ListNode(carry)
return head.next
方法2
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
head = cur = ListNode()
carry = 0
while l1 and l2:
sum = l1.val + l2.val + carry
cur.next = ListNode(sum % 10)
cur = cur.next
carry = sum // 10
l1 = l1.next
l2 = l2.next
while l1:
sum = l1.val + carry
cur.next = ListNode(sum % 10)
cur = cur.next
carry = sum // 10
l1 = l1.next
while l2:
sum = l2.val + carry
cur.next = ListNode(sum % 10)
cur = cur.next
carry = sum // 10
l2 = l2.next
if carry:
cur.next = ListNode(carry)
return head.next