leetcode_445 两数相加 II

99 阅读1分钟

要求

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

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

示例1:

image.png

输入: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]

核心代码

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        s1,s2 = [],[]
        while l1:
            s1.append(l1.val)
            l1 = l1.next
        
        while l2:
            s2.append(l2.val)
            l2 = l2.next
        
        carry = 0
        cur = ListNode(-1)
        while s1 or s2:
            value = carry
            if s1:
                value += s1.pop()
            if s2:
                value += s2.pop()

            carry = value > 9
            value %= 10

            cur.val = value
            pre = ListNode(-1)
            pre.next = cur
            cur = pre
    
        if carry:
            pre.val = 1
            return pre

        return pre.next

image.png

重点问题

解题思路

我们使用栈来存储数据,因为最后面的数据在栈顶,直接弹出即可,然后我们使用头插法的方式,构建一个新的链表,注意进位的问题。