LeetCode2.AddTwoNumbers两数相加(Java可运行,带测试用例)

一、题目

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:
在这里插入图片描述

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 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
  • 题目数据保证列表表示的数字不含前导零

二、题解

代码:

public class AddTwoNumbers {
    // Definition for singly-linked list.
    static class ListNode {
        int val;
        // 指向链表中下一个节点
        ListNode next;
        // 构造函数,使用一个值初始化节点
        ListNode(int x) { val = x; }

        // 重写方法,方便打印链表
        @Override
        public String toString() {
            return val + (next != null ? " -> " + next.toString() : "");
        }
    }

    static class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            // 定义一个新链表伪指针,用来指向头指针,返回结果
            ListNode pre = new ListNode(0);
            // 定义一个可移动的指针,指向存储两个数之和的位置
            ListNode cur = pre;
            // 存储两个数字相加的进位的值
            int carry = 0;
            // 当l1不等于null或l2不等于空时,就进入循环
            while(l1 != null || l2 != null) {
                // 如果l1不等于null时,就取它的值,等于null时,就赋值0,保持两个链表具有相同的位数
                int x = l1 == null ? 0 : l1.val;
                // 如果l2不等于null时,就取它的值,等于null时,就赋值0,保持两个链表具有相同的位数
                int y = l2 == null ? 0 : l2.val;
                // 将两个链表的值,进行相加,并加上进位数
                int sum = x + y + carry;

                // 计算进位数
                carry = sum / 10;
                // 计算两个数的和,此时排除超过10的请况(大于10,取余数)
                sum = sum % 10;
                // 将求和数赋值给新链表的节点,注意这个时候不能直接将sum赋值给cur.next = sum。这时候会报,类型不匹配。所以这个时候要创一个新的节点,将值赋予节点
                cur.next = new ListNode(sum);

                // 将新链表的节点后移
                cur = cur.next;
                // 当链表l1不等于null的时候,将l1的节点后移
                if(l1 != null) {
                    l1 = l1.next;
                }
                // 当链表l2不等于null的时候,将l2的节点后移
                if(l2 != null) {
                    l2 = l2.next;
                }
            }
            // 如果最后两个数,相加的时候有进位数的时候,就将进位数,赋予链表的新节点。两数相加最多为18,所以的的值最大只能是1
            if(carry == 1) {
                cur.next = new ListNode(carry);
            }
            // 返回链表的头节点
            return pre.next;
        }
    }

    // 主方法,用于测试
    public static void main(String[] args) {
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        l1.next.next = new ListNode(3);
        l1.next.next.next = new ListNode(6);
        System.out.println("l1: " + l1.toString());

        ListNode l2 = new ListNode(5);
        l2.next = new ListNode(6);
        l2.next.next = new ListNode(4);
        l2.next.next.next = new ListNode(7);
        System.out.println("l2: " + l2.toString());

        Solution solution = new Solution();
        ListNode result = solution.addTwoNumbers(l1, l2);
        // 打印结果链表
        System.out.println("result: " + result.toString());
        /**
         * 输出:
         * l1: 2 -> 4 -> 3 -> 6
         * l2: 5 -> 6 -> 4 -> 7
         * result: 7 -> 0 -> 8 -> 3 -> 1
         */
    }
}

时间复杂度:O(max(m,n)),其中 m 和 n 分别为两个链表的长度,上面算法最多重复max(m,n)次。
空间复杂度:O(max(m,n)),新列表的长度最多为max(m,n)+1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/288557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十大性能测试工具

这篇关于“性能测试工具”的文章将按以下顺序让您了解不同的软件测试工具&#xff1a; 什么是性能测试&#xff1f;为什么我们需要性能测试&#xff1f;性能测试的优势性能测试的类型十大性能测试工具 什么是性能测试&#xff1f; 性能测试是一种软件测试&#xff0c;可确保…

OpenFeign相关面试题及答案(2024)

1、什么是OpenFeign&#xff0c;它如何简化远程服务调用&#xff1f; OpenFeign是一个声明式的Web服务客户端&#xff0c;它使得编写HTTP客户端变得更加容易。它属于Spring Cloud Netflix项目的一部分&#xff0c;可以与Spring Boot应用轻松集成。通过使用OpenFeign&#xff0…

Python数据挖掘与机器学习实践技术应用

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…

金融追梦者,向着春天出发——社科院与美国杜兰大学金融管理硕士

随着时代的进步和社会的变迁&#xff0c;教育已经不再是单纯的学生时代的事情&#xff0c;而是贯穿人的一生。特别是在金融行业&#xff0c;由于其变幻莫测的特性&#xff0c;在职继续攻读硕士学位的人越来越多。他们希望通过进一步的学习和研究&#xff0c;提升自己的专业素养…

网络安全行业必考证书(NISP/CISP)

&#x1f50d; 网络安全行业需要考哪些证书&#xff1f; &#x1f4dd; 在网络安全行业&#xff0c;证书是非常重要的敲门砖。拥有一定的证书可以证明你具备相关的知识和技能&#xff0c;能够胜任相关的工作&#xff0c;对于企业投标也能更方便些。 &#x1f4dd;当之无愧的必然…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT&#xff1a;李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的&#xff0c;也就是 Sequence to Sequence…

IO进程线程 day4 文件IO与目录操作

1.使用标准IO完成两个文件拷贝 #include <head.h> int main(int argc, const char *argv[]) {//判断输入是否合法if(argc>3){printf("输入不合法\n");return -1;}//定义两个文件指针&#xff0c;用于读写FILE *fp1NULL;FILE *fp2NULL;if((fp1fopen(argv[1]…

ASP.Net实现海鲜添加(三层架构,异常处理)

演示功能&#xff1a; 点击启动生成页面 点击添加跳转新界面 此处设置文本框多行 点击Button添加 步骤&#xff1a; 1、建文件 下图是三层架构列表&#xff0c;Models里面有模拟数据库中列的类&#xff0c;DAL中有DBHelper和service,BLL中有BllManager文件用于ui界面直接调用…

FreeRTOS——信号量知识点总结及二值信号量实战

1信号量概念 1&#xff09;信号量的计数值都有限制&#xff1a;限定最大值。 如果最大值被限定为1&#xff0c;那么它就是二值信号量&#xff1b; 如果最大值不是1&#xff0c;它就是计数型信号量。 2&#xff09;当计数值大于0&#xff0c;代表有信号量资源 当释放信号量&…

模型融合之模型堆叠

一、理论 模型堆叠&#xff08;Model Stacking&#xff09;是一种集成学习的方法&#xff0c;其本质是将多个基学习器&#xff08;Individual Learner&#xff09;的预测结果作为新的特征&#xff0c;再训练一个元学习器&#xff08;Meta Learner&#xff09;来进行最终的预测。…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Green Sock | GSAP 动画库

1.什么是“GSAP”&#xff1f; GreenSock Animation Platform&#xff08;GSAP&#xff09; 是一个业界知名的动画工具套件&#xff0c;在超过1100万个网站上使用&#xff0c;其中包括大量获奖网站&#xff01; 您可以使用GSAP在任何框架中制作几乎任何JavaScript可以触及的动…

迅腾文化传播:触动每个移动消费者心灵的品牌故事缔造者

迅腾文化传播&#xff1a;触动每个移动消费者心灵的品牌故事缔造者 在这个高速发展的移动互联网时代&#xff0c;信息如同浩渺星海中的流星&#xff0c;瞬息万变。每个人的手机、平板、智能手表等移动设备&#xff0c;都成为了他们与世界连接的窗口。品牌&#xff0c;作为这个…

谷歌推出创新SynCLR技术:借助AI生成的数据实现高效图像建模,开启自我训练新纪元!

谷歌推出了一种创新性的合成图像框架&#xff0c;这一框架独特之处在于它完全不依赖真实数据。这个框架首先从合成的图像标题开始&#xff0c;然后基于这些标题生成相应的图像。接下来&#xff0c;通过对比学习的技术进行深度学习&#xff0c;从而训练出能够精准识别和理解这些…

STM32 学习(三)OLED 调试工具

目录 一、简介 二、使用方法 2.1 接线图 2.2 配置引脚 2.3 编写代码 三、Keil 工具调试 一、简介 在进行单片机开发时&#xff0c;有很多调试方法&#xff0c;如下图&#xff1a; 其中 OLED 就是一种比较好用的调试工具&#xff1a; OLED 硬件电路如下&#xff0c…

使用Redis进行搜索

文章目录 构建反向索引 构建反向索引 在Begin-End区域编写 tokenize(content) 函数&#xff0c;实现文本标记化的功能&#xff0c;具体参数与要求如下&#xff1a; 方法参数 content 为待标记化的文本&#xff1b; 文本标记的实现&#xff1a;使用正则表达式提取全小写化后的…

【竞技宝】DOTA2:Mad Kings官宣新阵容 南美新星Jimpark加盟!

北京时间2024年1月3日,随着本月DOTA2ESL吉隆坡站的比赛结束,下一个值得关注的大赛梦幻联赛S22举办的时间要等到今年的二月份了。虽然休赛期的转会狂潮已经过去,但目前还是有很多队伍依然在调整新赛季的阵容。 近日,南美战队Mad Kings在社交平台上官宣了发文,原阵容的所有选手(一…

LeetCode 每日一题 Day 28293031 ||三则模拟||找循环节(hard)

1185. 一周中的第几天 给你一个日期&#xff0c;请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数&#xff1a;day、month 和 year&#xff0c;分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday…

创建Qt项目

项目工程名称一般不要有特殊符号&#xff0c;不要有中文 项目工程保存路径可修改的&#xff0c;但路径不要带中文 构建系统&#xff0c;有3种&#xff0c;这里使用qmake qmake和cmake区别 构建过程不同&#xff0c;项目管理不同。 1、构建过程&#xff0c;qmake是Qt框架自带的…

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架&#xff0c;但是生态中的 Static 中间件使用起来却一直很不顺手。 所以&#xff0c;我顺手改了它&#xff0c;然后把这个改良版开源了。 写在前面 Gin-static 的改良版&#xff0c;我开源在了 soulteary/gin-static&a…