• 【LeetCode】445. 两数相加 II


    题目

    给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
    你可以假设除了数字 0 之外,这两个数字都不会以零开头。

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

    示例:

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

    思路

    使用栈来逆序链表元素。

    代码

    时间复杂度:O(n)
    空间复杂度:O(n)

    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;
            }
            ListNode *res = new ListNode(0);
            int c = 0;
            while (!st1.empty() || !st2.empty()) {
                int sum = c;
                if (!st1.empty()) {
                    sum += st1.top();
                    st1.pop();
                }
                if (!st2.empty()) {
                    sum += st2.top();
                    st2.pop();
                }
                res->val = sum % 10;
                ListNode *head = new ListNode(sum / 10);
                head->next = res;
                res = head;
                c = sum / 10;     
            }
            return c > 0 ? res : res->next;
        }
    };
    
  • 相关阅读:
    仿360拖拽
    js 鼠标拖拽元素移动
    js 随机生成颜色
    vue多视图
    vue 全局组件的注册
    一键分享到QQ空间、QQ好友、新浪微博、微信代码
    vuex如何管理需要即时更新的全局变量
    js检测是哪个浏览器
    for in,Object.keys()与for of的用法与区别
    js三元运算符
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12701831.html
Copyright © 2020-2023  润新知