2020-11-5 445. 两数相加 II

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

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
        #print(s1,s2)
        carry=0
        ans=None
        while s1 or s2 or carry !=0:
            #取每一位数相加
            a1=0 if not s1 else s1.pop()
            a2=0 if not s2 else s2.pop()
            sum=a1+a2+carry
            #取十位
            carry=sum//10
            #取个位
            cur=sum%10
            #建立结果链表
            curnode=ListNode(cur)
            curnode.next=ans
            ans=curnode
        return ans
代码分析

1、基本思路就是取出来相加
2、涉及进位,应该从低位开始,使用来装取出的值,刚好是先进后出
3、整除//获得十位,余数%取得个位,十位在下一次循环进行相加,个位存入链表
4、反向建立链表:

ans = None
{#循环
curnode = ListNode(cur) #建立新节点
curnode.next = ans #指向现有的链表的head
ans = curnode #head 向前移
}
python语法
print("*******if not...else语句*********")  
#if not 为假返回if not前面内容,否则返回0  
exp3 = lambda x:x+1 if not 2==1 else 0  
print(exp3(2))  
  
exp4 = lambda x:x+1 if not 1==1 else 0  
print(exp4(2))  
结果:
       3
       0
      [Finished in 0.3s]

错误:
在这里插入图片描述
不能直接赋值,否则获得节点,需用l1.valappend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值