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;
    }
}
相关推荐
小O的算法实验室17 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生19 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿19 小时前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz19 小时前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能19 小时前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****19 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能19 小时前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能19 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo19 小时前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ019 小时前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法