要求
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 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]
核心代码
# 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
重点问题
解题思路
我们使用栈来存储数据,因为最后面的数据在栈顶,直接弹出即可,然后我们使用头插法的方式,构建一个新的链表,注意进位的问题。