题目:
一、主要操作
1、进栈出栈:考虑到要从链尾开始相加,还要考虑进位,所以采用进栈出栈的方法,先所有链表的数进栈,出栈的时候链尾的数相加。
stack1 = [] #定义一个栈
# 入栈函数
def push_stack(p,stack):
while p:
stack.append(p.val)
p = p.next
# 调用入栈函数
push_stack(l1,stack1) # l1为需要入栈的链表
2、用头插法进行逆序:因为链尾先相加,相加结果依然要放到链尾,故要用头插法进行逆序
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
ans = None
carry = 0
while s1 or s2 or carry:
a = 0 if not s1 else s1.pop() #出栈
b = 0 if not s2 else s2.pop() #出栈
sum = a + b + carry
carry = sum // 10
c = sum % 10
# 头插法进行逆序
newnode = ListNode(c)
newnode.next = ans
ans = newnode
return ans