2.两数相加--python

题目:两个非空链表表示两个非负整数,逆序保存,将两链表表示的数相加,返回一个新的逆序链表

法:两数加法,只是用链表逆序表示,相当于头节点是个位数字,后面依次是十位、百位数等

注意:1)考虑进位,尤其是最后一次的进位,当两个链表都遍历完之后如果还有进位,再在尾部增加一个节点

           2)要记得每次移动指针,避免陷入死循环

 def addTwoNumbers(self, l1, l2):
        if l1==None:return l2
        if l2==None:return l1
        
        p,q=l1,l2
        res=ListNode(0)
        head,carry=res,0
        while p!=None or q!=None:
            tmp=0
            if p:
                tmp+=p.val
                p=p.next
            if q:
                tmp+=q.val
                q=q.next
            tmp+=carry
            carry=tmp//10
            tmp%=10
            head.next=ListNode(tmp)
            head=head.next
        
        if carry:
            head.next=ListNode(carry)
        return res.next
                

其实代码可以写的稍简洁一点,将进位carry放到一开始的大循环while中去

 def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
    
        res=ListNode(0)
        p,q,tmp=l1,l2,res
        
        carry=0
        
        while p!=None or q!=None or carry!=0:
            num=0
            if p!=None:
                num+=p.val
                p=p.next
            if q!=None:
                num+=q.val
                q=q.next
            num+=carry
            carry=num//10
            num%=10
            tmp.next=ListNode(num)
            tmp=tmp.next
        return res.next
            

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值