LeetCode 2:两数相加

一、题目描述

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

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

你可以假设除了数字 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
  • 题目数据保证列表表示的数字不含前导零

二、思路分析

1、将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,例如:9999999 + 9999 = 9999999 + 0009999 = 10009998;
2、每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值;
3、如果两个链表全部遍历完毕后,进位值为 1,则需要在结果链表最后添加新节点 1;

三、代码参考

1、Java

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        // 创建预先指针,该指针的下一个节点指向返回结果的链表的头节点
        ListNode preNode = new ListNode(0);
        // 创建遍历时需要进行操作的指针
        ListNode currentNode = preNode;
        // 用来存储进位,初始值为 0 
        int carry = 0;
        // 循环遍历,同时遍历 l1、l2 两个链表,直到两个链表中的所有节点都遍历完毕为止
        while(l1 != null || l2 != null){
            // 获取 l1 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位
            int value1 = l1 == null ? 0 : l1.val;
            // 获取 l2 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位
            int value2 = l2 == null ? 0 : l2.val;
            // 每一位计算的同时需要考虑上一位的进位情况
            int sum = value1 + value2 + carry;
            
            // 计算是否有进位的情况
            carry = sum / 10;
            // 获取当前计算结果的个位数
            // 比如 7 + 8 = 15,那么 sum % 10 = 5
            int digit = sum % 10;
            // 构建一个节点用来存放这个个位数,把这个节点加入到结果链表中
            currentNode.next = new ListNode(digit);
            // currentNode 节点向后移动
            currentNode = currentNode.next;

            // l1 链表中还有节点未遍历完毕就继续遍历下去
            if(l1 != null) 
                l1 = l1.next;
            // l2 链表中还有节点未遍历完毕就继续遍历下去
            if(l2 != null) 
                l2 = l2.next;
        }
        // 两个链表的尾节点相加之后,有可能产生进位的情况,所以,需要构建一个新的节点用来存放这个进位的结果
        if(carry == 1) {
            // 把这个节点加入到结果链表中
            currentNode.next = new ListNode(carry);
        }
        // 返回结果链表
        return preNode.next;
    }
}

2、Python

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        # 创建预先指针,该指针的下一个节点指向返回结果的链表的头节点
        preNode = ListNode(0)
        # 创建遍历时需要进行操作的指针
        currentNode = preNode
        # 用来存储进位,初始值为 0 
        carry = 0
        # 循环遍历,同时遍历 l1、l2 两个链表,直到两个链表中的所有节点都遍历完毕为止
        while l1 or l2 :
            # 获取 l1 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位
            value1 = l1.val if l1 else 0
            # 获取 l2 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位
            value2 = l2.val if l2 else 0
            # 每一位计算的同时需要考虑上一位的进位情况
            sum = value1 + value2 + carry

            # 计算是否有进位的情况
            carry = sum / 10
            # 获取当前计算结果的个位数
            # 比如 7 + 8 = 15,那么 sum % 10 = 5
            digit = sum % 10
            # 构建一个节点用来存放这个个位数,把这个节点加入到结果链表中
            currentNode.next = ListNode(digit)
            # currentNode 节点向后移动
            currentNode = currentNode.next

            # l1 链表中还有节点未遍历完毕就继续遍历下去
            if l1 :
                l1 = l1.next
            # l2 链表中还有节点未遍历完毕就继续遍历下去
            if l2 :
                l2 = l2.next
        # 两个链表的尾节点相加之后,有可能产生进位的情况,所以,需要构建一个新的节点用来存放这个进位的结果
        if carry == 1 :
            # 把这个节点加入到结果链表中
            currentNode.next = ListNode(carry)
        # 返回结果链表
        return preNode.next

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

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

相关文章

华为交换机ETH-TRUNK链路聚合lacp模式与手工模式

SW1配置如下 vlan batch 10interface Eth-Trunk1port link-type trunkport trunk allow-pass vlan 10mode lacp-static #手工模式删除改行max active-linknumber 2 #手工模式删除改行trunkport GigabitEthernet 0/0/1 to 0/0/2#配置为主设备&#xff08;修改优先级&…

下载知虾数据分析软件:优化店铺运营、提高转化率的利器

在如今竞争激烈的电商市场中&#xff0c;对销售数据、流量以及买家行为等关键指标的监控和分析至关重要。Shopee平台为卖家提供了一个内置的在线数据分析工具——“Shopee Analytics”&#xff08;知虾分析&#xff09;&#xff0c;让卖家能够轻松实现对店铺运营的优化、提高转…

通过XML您可以发明自己的标签

XML 仅仅是纯文本 XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。 不过&#xff0c;能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。 通过XML您可以发明自己的标签 在之前的例中的标签没有…

bootstrap5实现家具品牌商城网站Furniq(电商通用)

一、需求分析 家具品牌宣传网站是指用于宣传和推广家具品牌的网站。它的功能主要包括以下几个方面&#xff1a; 品牌介绍&#xff1a;家具品牌宣传网站通常会提供关于品牌的背景信息&#xff0c;包括品牌的历史、核心价值观、设计理念等。这些信息可以帮助消费者了解品牌的定位…

JavaScript怎么输出变量的值到控制台

2024年1月5日&#xff0c;周五晚上 通过console.log可以输出变量的值到控制台 let number 100;console.log(number);

风靡全网的Jmeter+ant+jenkins接口自动化测试框架

大致思路&#xff1a;Jmeter可以做接口测试&#xff0c;也能做压力测试&#xff0c;而且是开源软件&#xff1b;Ant是基于Java的构建工具&#xff0c;完成脚本执行并收集结果生成报告&#xff0c;可以跨平台&#xff0c;Jenkins是持续集成工具。将这三者结合起来可以搭建一套We…

如何利用SD-WAN优化企业访问Salesforce的体验?

在这个数字化时代&#xff0c;客户关系管理&#xff08;CRM&#xff09;应用如 Salesforce &#xff0c;已经成为企业运营的重要部分。然而&#xff0c;许多企业在使用 Salesforce 时常遇到页面加载缓慢、甚至完全无法访问等问题&#xff0c;严重影响了他们的工作效率和用户体验…

卷积神经网络|制作自己的Dataset(最终版)

​之前文章已经实现了一个自定义的类&#xff0c;制定了自己的数据集。其实&#xff0c;细看代码&#xff0c;可传入的参数过多&#xff0c;有些简单问题复杂化&#xff0c;实现上不是那么简洁。 既然是自己定义的数据集&#xff0c;那么许多功能是自己写好的&#xff0c;如何…

设计模式——最全梳理,最好理解

新年献礼&#xff01; 设计模式呕心梳理 创建型模式 单例模式&#xff08;Singleton Pattern&#xff09;https://blog.csdn.net/qq_34869143/article/details/134874044 整理中... 结构型模式 代理模式&#xff08;Proxy Pattern&#xff09;https://blog.csdn.net/qq_34…

在Fiber中处理请求和响应

掌握GoLang Fiber中请求和响应管理的艺术&#xff0c;以实现高效的Web开发 在Web开发领域&#xff0c;有效地处理请求和响应是构建既用户友好又高效的Web应用的基石。该过程涉及管理传入的HTTP请求、解析数据和参数、构建适当的响应、处理不同的响应类型以及优雅地处理错误。对…

【unity】Obi插件架构组成(参数详细解释)——解算器四面板设置、三种更新器、参与者介绍

文章目录 一、架构&#xff08;Architecture&#xff09;1.1 Obi解算器&#xff08;ObiSolver&#xff09;1.2 ObiUpdater1.3 ObiActorBlueprint1.4 Obi参与者&#xff08;ObiActor&#xff0c;如ObiRope等&#xff09; 二、Obi解算器&#xff08;ObiSolver&#xff09;2.1 解算…

解决:Microsoft Visual C++ 14.0 is required.

Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools 当我们安装绝大部分python包的时候可以通过pip install 或者 conda install解决&#xff0c;但是任然有些包是安装不了的&#xff0c;比如我的就是在安装pyqt5的时候报Building wheel for…

51单片机之按键和数码管

51单片机之按键和数码管 ✍前言&#xff1a;♐独立按键&#x1f600;独立按键的原理&#x1f600;软件实现按键控制LED灯的亮灭 ♐数码管&#x1f60a;数码管显示数字或者字母的原理&#x1f409;共阳极数码管&#x1f409;共阴极极数码管&#x1f409;4位1体数码管 &#x1f6…

二叉搜索树与双向链表

解题思路一&#xff1a; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;} } */ // 一定要用自己的理解真正弄出来才行&#xff0c;否则没有用&#xff01; // 再次提醒&#xff0c;计算机这种工科…

【计算机算法设计与分析】n皇后问题(C++_回溯法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同…

三款推荐的 FTP 工具

&#x1f947; 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅&#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 三款推荐的 FTP 工具filezillawinscpFinalShell SSHXftp❤️ 人生苦短&#xff0c; 欢迎…

linux 系统 kill 指令笔记

kill 名称 kill - send a signal to a process 向指定的线程或进程发送信号 描述 The default signal for kill is TERM. Use -l or -L to list availablesignals. Particularly useful signals include HUP, INT, KILL, STOP,CONT, and 0. Alternate signals …

啊哈c语言——逻辑挑战8:验证哥德巴赫猜想

上面这封书信是普鲁士数学家哥德巴赫在1742年6月7日写给瑞士数学家欧拉的&#xff0c;哥德巴赫在书信中提出了“任一大于2的整数都可以写成3个质数之和”的猜想。当时&#xff0c;哥德巴赫遵照的是“1也是素数”的约定。现今&#xff0c;数学界已经不使用这个约定了。哥德巴赫原…

新品牌在小红书上宣传推广怎么做?

对于新品牌来说&#xff0c;如何在小红书进行有效的宣传推广&#xff0c;成为了一大挑战。本文伯乐网络传媒将为你揭秘新品牌在小红书上的宣传策略&#xff0c;助你牢牢抓住用户流量&#xff0c;提升品牌知名度。 小红书作为一款以内容为核心的社交电商平台&#xff0c;具有极高…

Flume基础知识(二):Flume安装部署

1. Flume 安装部署 1.1 安装地址 &#xff08;1&#xff09;Flume 官网地址&#xff1a;Welcome to Apache Flume — Apache Flume &#xff08;2&#xff09;文档查看地址&#xff1a;Flume 1.11.0 User Guide — Apache Flume &#xff08;3&#xff09;下载地址&#xf…