两数相加
本文最后更新于244 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

🔗 两数相加

题目来源:2. 两数相加 – 力扣(LeetCode)

📌 题目描述

给你两个非空的链表,表示两个非负整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设:

  • 除了数字 0 之外,这两个数都不会以 0 开头。
  • 链表表示的数字不含前导零。

✅ 示例解析

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

⚠️ 提示

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

💡 解法:模拟竖式加法 + 虚拟头节点 —— O(max(m,n)) 时间,O(1) 空间

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0; 
        ListNode dummy = new ListNode(0); 
        ListNode p = dummy;

        while (l1 != null || l2 != null || carry != 0) { 
            int sum = carry;
            if (l1 != null) {
                sum += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                sum += l2.val;
                l2 = l2.next;
            }
            carry = sum / 10;
            p.next = new ListNode(sum % 10);
            p = p.next;
        }

        return dummy.next;
    }
}

📊 复杂度分析

  • 时间复杂度:O(max(m, n))
    • m、n 分别为两个链表长度,需遍历较长链表 + 可能的进位。
  • 空间复杂度:O(1) ✅(不计结果链表空间)
    • 仅使用常数变量:carrydummyp

🧩 解题思路

核心思想:模拟小学竖式加法,从低位到高位逐位相加,处理进位。

  1. 初始化:
    • 创建虚拟头节点 dummy,简化链表构建。
    • 指针 p 用于构建结果链表。
    • carry 记录进位,初始为 0。
  2. 循环条件:
    • l1 != null 或 l2 != null 或 carry != 0
    • 即使两个链表都走完,若还有进位(如 9+9=18),仍需新增节点。
  3. 每轮操作:
    • sum = carry + (l1.val if exists) + (l2.val if exists)
    • 更新进位:carry = sum / 10
    • 创建新节点:sum % 10(当前位结果)
    • 指针 p 前移。
  4. 返回结果:
    • dummy.next 即为结果链表真实头节点。

举例说明:

输入:l1 = [2,4,3], l2 = [5,6,4]

第1位:2 + 5 + 0 = 7 → carry=0 → 节点 7
第2位:4 + 6 + 0 = 10 → carry=1 → 节点 0
第3位:3 + 4 + 1 = 8 → carry=0 → 节点 8
结束 → 结果:7→0→8 ✅

边界处理:

  • 两个链表长度不等 → 短链表补 0(代码中通过 if 判断实现)。
  • 最后一位有进位 → 循环继续,新增节点(如示例3末尾的 1)。
  • 全为 0 → 直接返回 [0](示例2)。
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇