🌐 AI搜索 & 代理 主页

0445. 两数相加 II

题目地址(445. 两数相加 II)

https://leetcode-cn.com/problems/add-two-numbers-ii/

题目描述

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

 

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

 

示例:

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

前置知识

  • 链表

公司

  • 腾讯

  • 百度

  • 字节

思路

由于需要从低位开始加,然后进位。 因此可以采用栈来简化操作。 依次将两个链表的值分别入栈 stack1 和 stack2,然后相加入栈 stack,进位操作用一个变量 carried 记录即可。

最后根据 stack 生成最终的链表即可。

也可以先将两个链表逆置,然后相加,最后将结果再次逆置。

关键点解析

  • 栈的基本操作

  • carried 变量记录进位

  • 循环的终止条件设置成stack.length > 0 可以简化操作

  • 注意特殊情况, 比如 1 + 99 = 100

代码

  • 语言支持:JS,C++, Python3

JavaScript Code:

C++ Code:

Python Code:

复杂度分析

其中 M 和 N 分别为两个链表的长度。

  • 时间复杂度:$O(M + N)$

  • 空间复杂度:$O(M + N)$

大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。 大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。

最后更新于

这有帮助吗?