LeetCode:2. 两数相加

简介

题目链接:https://leetcode.cn/problems/add-two-numbers/description/

解决方式:链表 + 双指针

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

推荐看画手大鹏大佬的讲解。

双指针

解题思路:两个指针分别指向两个链表的头节点,由于链表的头节点就是数字的最后一位,所以可以直接相加。这题需要注意的是,两数相加后的进位和进位后的余数。而伪头节点基本上是涉及到创建第三方链表的必备了,主要目的是指向真正的头节点,防止链表丢失。

java 复制代码
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        // 伪头节点,防止第三个链表丢失
        ListNode whead = new ListNode(0);
        // 迭代指针
        ListNode pre = whead;
        // 低位的进位
        int carry = 0;
        // 两链表其中一个不为 null 则不断迭代。
        while(l1 != null || l2 != null){
            // null 的那个高位补零
            int x = l1 != null ? l1.val : 0;
            int y = l2 != null ? l2.val : 0;
            // 计算进位和余数
            int sum = x + y + carry;
            carry = sum / 10;
            sum = sum % 10;
            // 加入第三个链表中
            pre.next = new ListNode(sum);
            // 后移
            pre = pre.next;
            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
        }
        // 最高位数字相加还有进位,则创建最高位
        if(carry == 1){
            pre.next = new ListNode(1);
        }
        // 返回结果
        return whead.next;
    }
}
相关推荐
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue9 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路10 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星10 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑10 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光10 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩11 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947311 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ12 小时前
单词拆分----dp
算法