目录

0445:两数相加 II(★)

力扣第 445 题

题目

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例1:

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

提示:

  • 链表的长度范围为 [1, 100]
  • 0 <= node.val <= 9
  • 输入数据保证链表代表的数字无前导 0

进阶:如果输入链表不能翻转该如何解决?

分析

  • 可以用 0206 反转链表,即转为问题 0002
  • 更简单的是直接取出两个数相加
  • 或着数太大时,取出两个数组,再模拟相加,类似 0415

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        def get(l):
            a = 0
            while l:
                a = a*10+l.val
                l = l.next
            return a
        a = get(l1)+get(l2)
        dum = p = ListNode()
        for c in str(a):
            p.next = ListNode(int(c))
            p = p.next
        return dum.next

59 ms