leetcode-445兩數相加
阿新 • • 發佈:2021-05-06
題目:
一、主要操作
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