力扣Top100题之两数相加(Java解法)

news2024/9/25 23:22:09

0 题目描述

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
在这里插入图片描述
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
题目链接:2. 两数相加

1 算法思想

这里以示例1为例,因为链表中存储的每一个数字都是逆序的,所以首尾就是存储的最低位。因此要求两个链表所表示的数之和并逆序存储,步骤如下:

  • 首先分别遍历两链表对应位置上的元素,并求和
  • 得到新节点的值,因为节点值范围不超过10,所以若是两数和大于10还需要向前进位
  • 新建节点并插入到保存结果的链表中
  • 终止条件是当两个链表都遍历完了
    在这里插入图片描述
    注意:这里存在一个问题就是进位的问题,若果是遍历到两个链表的最后一位需要进位怎么办?
    可以用一个全局变量保存上一次的进位,每使用一次进位就将该变量职为0,链表遍历之后再判断进位变量是否为0,如果不为0说明最后一位还存在进位,那么就需要再初始化一个值为该变量的新节点并插入到结果链表的末尾。

2 代码实现

 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode newNode = new ListNode(-1); //结果链表的头结点
        ListNode pred = newNode;  //用于保存新插入链表节点的上一个位置,便于找到当前的链表尾
        ListNode cur1 = l1; //l1链表的移动指针
        ListNode cur2 = l2;  //l2链表的移动指针
        int temp = 0; //存储两数之和的进位
        while (cur1 != null || cur2 != null){
            int num1=0,num2=0;
            if (cur1 != null) num1 = cur1.val;
            if (cur2 != null) num2 = cur2.val;
            int sum = num1+num2;

            if (temp > 0){  //判断是否存在进位
                sum += temp;  //加上进位
                temp = 0; //置零
            }

            if (sum >= 10){  //大于10 下一个节点需要进位
                temp = sum / 10;
                sum = sum % 10;
            }
            ListNode node = new ListNode(sum);
            pred.next = node; //新节点插入到结果链表尾
            pred = node;  //保存节点位置
            //移动指针
            if (cur1 != null) cur1 = cur1.next;
            if (cur2 != null) cur2 = cur2.next;
        }

        //判断最后是否还要进位,考虑最高位需要进位的情况
        if (temp != 0){
            pred.next = new ListNode(temp);
        }

        return newNode.next;
    }

3 测试结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity IOS 通过命令行导出IPA

新建一个文件没有后缀然后输入如下内容 #!/usr/bin/env sh /Applications/Unity/Hub/Editor/2020.1.5f1c1/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath /Users/zyt/Test -executeMethod Test.BuildEditor.BuildApp cd /Users/zyt/Test/Xcode/unity-xcode x…

Redis:SETNX解决分布式锁误删问题

Redis:SETNX解决分布式锁误删问题一.概述二. 分布式锁(初级)(1)锁接口(2)锁实现类上锁(3)释放锁(4)存在的问题三. 改进释放锁(1&#…

linux:字符串拷贝的五种方法:使用指针下标,指针变量加偏移量,指针变量自加等

字符串数组名做函数形参&#xff0c;会退化正指针变量&#xff0c;需要使用指针变量操作字符串 代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…

NDlib:npm启动网络演化可视化项目(SIR模型)

文章目录安装node.js以及vue启动NDlib_viz可视化项目后续问题打开项目安装node.js以及vue 参考之前的文章Node.js、npm和vue下载及安装 启动NDlib_viz可视化项目 在github下载项目到本地 https://github.com/GiulioRossetti/NDLib_viz 将node.js路径添加到环境变量 打开命令…

令执法机构头疼的“虚拟货币犯罪”,为何链上天眼能“行”

谈到洗钱&#xff0c;你脑海中率先想到的可能是影视剧中利用赌场、收藏品拍卖等来实施犯罪。其实洗钱犯罪的花样不止于此&#xff0c;在近期热播的扫黑剧《狂飙》中&#xff0c;唐小龙为洗白“赌博资金、高利贷业务”&#xff0c;便通过“卖酒网销”的方式达成洗钱目的。 随着科…

基于SpringCloud的可靠消息最终一致性04:项目基础代码

上一节给出了项目需求和骨架代码,这一节来接着看基础代码。骨架代码和基础代码最主要的区别是:骨架代码都是数据库脚本、POM依赖文件、配置文件内容、运维脚本等,而基础代码则是和业务有关联,但并非关键代码的部分。 这些代码不用一个个地看,主要是看看结构就行。 图二十五…

python 生成唯一id的实现方式

python 生成唯一id的实现方式 常用的python生成唯一id的四种方式 1.使用UUID UUID应该是大家耳熟能详的一个东西了&#xff0c;它的全称叫 通用唯一识别码&#xff08;英語&#xff1a;Universally Unique Identifier&#xff0c;缩写&#xff1a;UUID&#xff09;生成标准3…

对比多个笔记软件后,我选择了语雀

1、前言 早在两年前&#xff0c;那是我第一次用语雀&#xff0c;第一次使用时&#xff0c;就被其用户体验所震撼。它的操作界面简洁、清晰、易于上手&#xff0c;而且功能齐全、方便实用。但是那时候除了工作的笔记&#xff0c;大部分都还在印象笔记上面&#xff0c;也有部分文…

std::chrono笔记

文章目录1. radio原型作用示例2. duration原型&#xff1a;作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉&#xff0c;这个库真恶心&#xff0c;刚接触感觉跟shi一样&#xff0c;特别是那个命名空间&#xff0c;太…

人工智能高等数学--人工智能需要的数学知识_微积分_线性代数_概率论_最优化---人工智能工作笔记0024

然后我们看一下人工智能中需要的数学知识 数学知识是重要的,对于理解人工智能底层原理来说很重要,但是工作中 工作中一般都不会涉及的自己写算法之类的,只是面试,或者理解底层原理的时候需要 然后看一下人工智能需要哪些数学知识 这里需要微积分 线性代数 概率论 最优化的知识…

狂神说:面向对象(三)——多态

多态// 对象能执行什么方法&#xff0c;主要看对象左边的类型&#xff0c;和右边的没有关系多态&#xff1a;同一方法可以根据发送对象的不同而采用不同的行为方式父类&#xff1a;public class Person {public void run(){System.out.println("Person > run");}}…

跳跃游戏 (贪心/动态规划/dfs)

1.跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目&#xff0c;经常是给定一数组arr[]&#xff0c;从数组的某一位置i出发&#xff0c;根据一定的跳跃规则&#xff0c;比如从i位置能跳arr[i]步&#xff0c;或者小于arr[i]步&#xff0c;或者固定步数&#xff0c;直到到达某一位…

Java 【数据结构OJ题十道】—— 二叉树篇2

文章目录一、二叉树前序遍历二、二叉树层序遍历三、按照之字形打印二叉树四、二叉树中和为某一值的路径(一)五、二叉搜索树与双向链表六、合并二叉树七、二叉树的镜像八、判断是否为二叉搜索树九、判断是否为完全二叉树十、判断是否为平衡二叉树总结提示&#xff1a;本人是正在…

TCP中RTT时延的理解

最近服务器环境部署了tcprtt网络时延监控&#xff0c;发现不同服务器不同节点之间的RTT时延表象非常奇怪&#xff0c;无法准确的判断服务器的网络情况。因此需要弄清楚什么是RTT&#xff0c;以及能否作为服务器网络性能的检测指标。 1、RTT是什么&#xff1f; TCP中的RTT指的是…

倾向得分匹配案例分析

一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的&#xff0c;首次运用在生物医药领域&#xff0c;后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素&#xff08;干扰因素&#xff09;的偏差。 …

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件&#xff1a;服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…

连接金蝶云星空,数据交互轻松搞定!丨三叠云

金蝶云星空 路径 拓展 >> 插件 功能简介 新增插件「金蝶云星空」。 用户可通过配置「金蝶云星空」插件&#xff0c;就可以实时获取「金蝶云星空」的数据&#xff0c;同时支持回填数据至金蝶系统内。 地图视图 路径 表单 >> 表单设计 功能简介 新增「地图视…

prometheus+cadvisor监控docker

官方解释 cAdvisor&#xff08;ContainerAdvisor&#xff09;为容器用户提供了对其运行容器的资源使用和性能特性的了解。它是一个正在运行的守护程序&#xff0c;用于收集、聚合、处理和导出有关正在运行的容器的信息。具体来说&#xff0c;它为每个容器保存资源隔离参数、历史…

活动目录(Active Directory)组策略管理工具

活动目录&#xff08;Active Directory&#xff09;是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。&#xff08;Active Directory不能运行在Windows Web Server上&#xff0c;但是可以通过它对运行Windows Web Server的…

虚拟数字人直播带货相比人工有哪些优势?

新经济时代的到来&#xff0c;彻底改变了传统的消费方式。虚拟数字人的出现&#xff0c;标志着新一波的消费升级到来。虚拟数字人直播带货&#xff0c;不仅降低了商家的带货成本&#xff0c;拉近了商家与消费者的距离&#xff0c;也给消费者带来全新的消费方式。 花西子虚拟形象…