【LeetCode】【Java】两数相加

1️⃣题目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b99stdJo-1667821428931)(file://D:\资源\学习工作\lnnau\typora笔记\Mark Text\算法比赛刷题\LeetCode\随便刷\assets\两数之和\2022-11-07-19-28-11-image.png?msec=1667820491595)]

首先要读题,我已经在读题上栽了许多次了。

题目首先给出了几个关键条件,“非空链表”、“表示两个非负整数”、“逆序存储”、每个结点存储一位“、”两数相加“,其中比较关键的信息是逆序存储,为什么要用逆序存储呢?题目最终让求两数相加,我们平时在进行加法运算时,都是从个位开始,满10进1,那么题目说逆序存储,那么我们相加后,进位是可以很方便的加到下一位上,这样也符合链表的顺序,便于求解,否则我们还要将两个链表反转再相加。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBWwkF9F-1667821428934)(file://D:\资源\学习工作\lnnau\typora笔记\Mark Text\算法比赛刷题\LeetCode\随便刷\assets\两数之和\2022-11-07-19-36-59-image.png?msec=1667821019291)]

2️⃣思路

明白题意,思路其实很简单,就是利用链表的特性进行求解,我们可以用循环来遍历两个链表,当其中一个链表不为null时,我们就可以求和,把求到的结果存到新的链表中,最后返回链表的头结点即可。

具体看代码注释

3️⃣代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res = new ListNode();
        ListNode head = res;
        int carry = 0;  //进位值
        while (l1!=null || l2!=null) {
            int sum = 0;
            //l1不为null,把当前值加上
            if (l1!=null) {
                sum += l1.val;
                l1 = l1.next;
            }
            if (l2!=null) {
                sum += l2.val;
                l2 = l2.next;
            }
            //先求和,再更新进位值,运行次序不能边
            sum = sum + carry; 
            //更新下一个进位数
            carry = sum / 10;
            //确保val在0-9
            sum = sum  % 10;
            //求值结果放入下一个结点中,最终求得的结点比原先多一个,所以返回结果从头结点的下一结点开始。
            head.next = new ListNode(sum);
            head = head.next;
        }
        //确保最后一位进位值(非0)可以加入新链表
        if(carry == 1){
            head.next = new ListNode(carry);
        }
        //返回链表的下一个元素,因为起始元素没有保存结果
        return res.next;
    }
}
posted @   Lnnau  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示