2. 两数相加
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。`
一、递归
def sum(l1,l2):
if len(l1) < len(l2):
l1,l2=l2,l1
print(l1,l2)
if len(l1)>len(l2):
for i in range(len(l2),len(l1)):
l2.append(0)#现在l1,l2一定一样长了
l3=[]
h=0#进位符
for i in range(len(l1)):
if i==0:
l3.append((l1[i]+l2[i])%10)
h=(l1[i]+l2[i])//10
else:
l3.append(((l1[i]+l2[i])%10+h)%10)
h=(l1[i]+l2[i]+h)//10
if h!=0:
l3.append(1)
print(l3)
if __name__ == '__main__':
l1=input().split()
l2=input().split()
l1_list = [int(x) for x in l1 if x.isdigit()]
l2_list = [int(x) for x in l2 if x.isdigit()]
sum(l1_list,l2_list)
二、运行
总结
在设计代码的时候,一开始我就总想着直接把进位加到l2列表之上
采用了
l2[i+1]=((l1[i]+l2[i])%10+(l1[i-1]+l2[i-1])//10)//10#进一
但这样有了列表长度的限制,一梳理发现想的很美好,运行起来需要加更多限制条件,越改越乱
所以在设计代码的时候,要简单清晰明了,脑子一乱毁所有