LeetCode2.两数相加

一、题目

二、思路

由于输入的两个链表都是逆序存储数字的每一位,所以两个链表中同一个位置的数字可以直接相加,同时遍历两个链表,逐位计算两个结点的数值之和,同时当前两个结点的数值之和还要加上来自低位的进位(因为逆序存储,所以低位就是两个链表的当前节点的前一个结点相加产生的进位),即设两个结点的当前节点分别为n1和n2,前一位的进位为carry,当前的和为n1+n2+carry,对应答案链表应该放的值为(n1+n2+carry)mod 10,新的进位值为(n1+n2+carry) / 10。

如果两个链表长度不同,可以认为长度短的链表后面有若干个0(短的说明高位为0,就是链表后面为0)。

当遍历结束后发现carry仍然大于0,说明最高位相加时产生了进位,将这个进位值直接加在答案链表后面即可。

三、代码实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
       ListNode *head = nullptr, *tail = nullptr;
       int carry = 0;
       while(l1 || l2) {
            //如果结点值为空 将n1或者n2设置为0 对sum无影响
            int n1 = l1 ? l1 -> val : 0;
            int n2 = l2 ? l2 -> val : 0;
            int sum = n1 + n2 + carry;
            if(!head) {
                //当头结点为空 说明当前这个数字是头结点的值 赋值 同时将tail初始化为头结点的值
                head = tail = new ListNode(sum % 10);
            } else {
                tail -> next = new ListNode(sum % 10);
                tail = tail -> next;
            }
            //计算进位
            carry = sum / 10;
            if(l1) {
                l1 = l1 -> next;
            }
            if(l2) {
                l2 = l2 -> next;
            }
       }
       if(carry > 0) {
            //如果最高位产生进位 将进位放在答案链表末尾 表示答案的最高位的数值
            tail -> next = new ListNode(carry);
       }
       return head;
    }
};
相关推荐
青少儿编程课堂3 分钟前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康28 分钟前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备1 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
小小晓.1 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
怕浪猫1 小时前
用了两年 AI 编程工具后,我重新理解了什么是「资深工程师」
算法·面试·架构
hetao17338372 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
云淡风轻~窗明几净2 小时前
宇宙管理学猜想
算法·图论
春风解人意2 小时前
从零开始学习嵌入式P28----线程
c语言·学习·算法
luj_17682 小时前
合法避税与投资评估实战指南
c语言·开发语言·网络·经验分享·算法
Bruce_Liuxiaowei3 小时前
驴滑块拼图游戏:从19世纪的纸片谜题到数学博弈论
人工智能·算法