LeetCode 0445. 两数相加 II

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0445. 两数相加 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 ) O(n+m) O(n+m),其中 n n n是第一个链表中的节点个数, m m m是第二个链表的节点个数
  • 空间复杂度 O ( n + m ) O(n+m) O(n+m)

AC代码

C++

class Solution 
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) 
        stack<int> st1, st2;
        while (l1) 
            st1.push(l1->val);
            l1 = l1->next;
        
        while (l2) 
            st2.push(l2->val);
            l2 = l2->next;
        
        stack<int> added;
        int carry = 0;
        while (st1.size() || st2.size()) 
            if (st1.size()) 
                carry += st1.top();
                st1.pop();
            
            if (st2.size()) 
                carry += st2.top();
                st2.pop();
            
            added.push(carry % 10);
            carry /= 10;
        
        if (carry)
            added.push(carry);
        ListNode* ans = new ListNode;
        ListNode* p = ans;
        while (added.size()) 
            p->next = new ListNode(added.top());
            added.pop();
            p = p->next;
        
        return ans->next;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127316269

以上是关于LeetCode 0445. 两数相加 II的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 445. 两数相加 II(Add Two Numbers II)

[LeetCode] 445. 两数相加 II

LeetCode Java刷题笔记—445. 两数相加 II

LeetCode 445 两数相加 II

LeetCode 445. 两数相加 II Add Two Numbers II (Medium)

LeetCode 445. 两数相加 II Add Two Numbers II (Medium)