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 啦。 大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。 
最后更新于
这有帮助吗?