Killing LeetCode [445] 两数相加 II

Description

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

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

Intro

Ref Link:https://leetcode.cn/problems/add-two-numbers-ii/
Difficulty:Medium
Tag:LinkedList、Math
Updated Date:2023-03-14

Test Cases

示例1:
Killing LeetCode [445] 两数相加 II_第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

进阶:

如果输入链表不能翻转该如何解决?

思路

  • 反转链表

Code AC

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        Stack stack1 = new Stack<>();
        Stack stack2 = new Stack<>();
        while (l1 != null) {
            stack1.push(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            stack2.push(l2.val);
            l2 = l2.next;
        }
        int sign = 0;
        ListNode pre = null;
        while (!stack1.isEmpty() || !stack2.isEmpty() || sign != 0) {
            int val1 = stack1.isEmpty() ? 0 : stack1.pop();
            int val2 = stack2.isEmpty() ? 0 : stack2.pop();
            int val = sign + val1 + val2;
            sign = val / 10;
            val = val % 10;
            ListNode node = new ListNode(val);
            node.next = pre;
            pre = node;
        }
        return pre;
    }
}

Accepted

1563/1563 cases passed (5 ms)
Your runtime beats 30.99 % of java submissions
Your memory usage beats 66.41 % of java submissions (41.4 MB)

复杂度分析

  • 时间复杂度:O(max(m,n)),其中 m 和 n 分别为两个链表的长度。
  • 空间复杂度:O(m+n)。

你可能感兴趣的:(我的算法笔记,leetcode,链表,数据结构)