LeetCode两数相加

两数相加

题目描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1

输入:l1 = [2,4,3], l2 = [5,6,4]

输出:[7,0,8]

解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]

输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]

输出:[8,9,9,9,0,0,0,1]

思路分析:

按照数学加法规则,我们要相加两个数,自然是从个位数开始加,超过10则进一位。在这道题当中,数字以链表的形式反向存储了起来,这样正好可以让我们从链表的头结点(个位)开始加。

如果你知道思路,但自己写出来的代码总不能完全通过测试,那多半是因为有一些较坑的测试用例你的代码没法兼顾到(确实会有很多,比如99+9999等),来看看下面的这种简单实现方法吧:

核心:增设变量temp,temp起到了判断进位和是否要继续增设结果节点的作用。

代码:

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        temp = 0 #关键
        p = ListNode()#定义一个超节点,它的next指向结果
        q = p#用变量q来保存这个超节点
        while l1 or l2 or temp:#关键循环条件
#l1,l2,temp中只要有任何一个haicunzai ,就得继续往下增设结果节点
            if l1:#有l1就增加l1的值
                temp+=l1.val
                l1=l1.next
            if l2:#有l2就增加l2的值
                temp+=l2.val
                l2=l2.next
			#此时的temp就是l1(如果有)加l2值(如果有)加进位值
            p.next = ListNode(temp%10)#temp超过10的话就取超过10的部分
            temp= temp//10#temp更新为进位值
            p=p.next
        return q.next

如此,问题解决。

posted @   JunanP  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示