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
如此,问题解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了