445.两数相加 II
【LetMeFly】445.两数相加 II
力扣题目链接:https://leetcode.cn/problems/add-two-numbers-ii/
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
输入:l1 = [7,2,4,3], l2 = [5,6,4] 输出:[7,8,0,7]
示例2:
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[8,0,7]
示例3:
输入:l1 = [0], l2 = [0] 输出:[0]
提示:
- 链表的长度范围为
[1, 100]
0 <= node.val <= 9
- 输入数据保证链表代表的数字无前导 0
进阶:如果输入链表不能翻转该如何解决?
方法一:栈
链表是从前往后的,加法是从后往前的。
因此,栈就很合适。
首先使用两个栈,把两个链表中的元素分别入栈。
这样,在出栈的时候,就是从两个“链表数字”的低位开始运算了。
存放答案的时候同理,我们同样开辟一个“答案栈”,因为是从低位开始运算的,而低位要放到链表最后边。
之后用一个数carry
来存放“进位”,当有栈不空时,将栈顶元素取出并累加,将carry
的个位入栈。
之后carry
对10取模,十位变成新的“进位”
最终,将元素不断从答案栈中取出(是从高位开始取的),逐个添加到链表末尾即可。
- 时间复杂度$O(n+m)$,其中$n$是第一个链表中的节点个数,$m$是第二个链表的节点个数
- 空间复杂度$O(n+m)$
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127316269
445.两数相加 II
https://blog.letmefly.xyz/2022/10/14/LeetCode 0445.两数相加II/