LeetCode--2.两数相加

news2024/7/4 6:32:51

文章目录

  • 1 题目描述
  • 2 解题思路
    • 2.1 代码实现

1 题目描述

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

请你将两个数相加, 并以相同形式返回一个表示和的链表
你可以假设除了数字 0 之外, 这两个数都不会以 0 开头
示例 1:
image.png

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

2 解题思路

从题目描述看, 是从0 ~ n 结点遍历 ListNode l1, l2, 计算相同位置节点的和, 需要注意进位

  1. 计算相同位置节点的和: int sum = l1.val + l2.val + increase, 其中 increase 是进位
  2. 当前节点需要保存的数据 sum % 10, 计算进位 increase = sum / 10
  3. 需要考虑 l1 和 l2 遍历时, 可能会存在遍历完成时, 获取当前节点 val 时, 需要补充为 0
  4. 将 l1 和 l2 指向 next 节点

2.1 代码实现

/**  
 * 1. 需要考虑两个链表为空的情况  
 * 2. 需要考虑计算进位问题  
 * 3. 需要考虑两个链表长度不一致, 短的链表需要荣光补 0 来实现  
 */  
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {  
    // 考虑两个链表为空的情况  
    if (null == l1 || null == l2) {  
        return null == l1 ? l2 : l1;  
    }  
  
    // 定义负数做头结点的链表ListNode, 用于存储结果  
    ListNode result = new ListNode(-1);  
    // 定义当前链表的指针  
    ListNode current = result;  
    // 定义进位  
    int increase = 0;  
    // 遍历两个链表, 如果两个链表都为空, 并且进位为 0, 则结束循环  
    // 例如 l1 = [2, 3, 6], l2 = [5, 6, 4] 时, 当 l1, l2 都遍历完毕后, 还需要判断进位, 此时进位为 1, 则需要再增加一个节点, 最终结果为 [7, 9, 0, 1]    while (l1 != null || l2 != null || increase != 0) {  
        // 计算两个链表的值, 如果链表为空, 则补充为 0        /*         * 例如 l1 = [2, 3, 6], l2 = [5, 6, 4, 9, 11] 时, 当 l2 遍历到 9 时, l1 已经为空了,  
         * 此时需要给 l1 补充一个 0, 才能继续计算, 此时 l1.val = 0, l2.val = 9, increase = 1         */        int sum = (null == l1 ? 0 : l1.val) + (null == l2 ? 0 : l2.val) + increase;  
        current.next = new ListNode(sum % 10);  
        // 计算进位  
        increase = sum / 10;  
        // 移动链表ListNode l1 和 l2 的指针, 用于下一次计算  
        if (l1 != null) {  
            l1 = l1.next;  
        }  
        if (l2 != null) {  
            l2 = l2.next;  
        }  
        // 移动链表的指针, 用于下一次计算  
        current = current.next;  
    }  
    // 返回链表的下一个节点, 因为第一个节点是负数做头结点的链表ListNode  
    return result.next;  
}

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

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

相关文章

maya2023安装

1、解压压缩包&#xff0c;点击setup安装&#xff0c;除修改安装路径外&#xff0c;其他都是都是下一步&#xff0c;安装后最好重启系统 破解步骤 关闭杀毒&#xff0c;防止误删1.安装Autodesk软件&#xff0c;但是不要启动&#xff0c;安装完成后重启电脑 2.安装破解文件夹里…

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 &#xff1a;范少华 研究方向 &#xff1a;图神经网络 论文标题 &#xff1a;基于学习解纠缠因果子结构的图神经网络去偏 论文链接 &#xff1a;https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…

JAVA实现校园二手交易系统 开源

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6 资讯…

软考系统架构师知识点集锦四:信息安全技术基础知识

一、考情分析 二、考点精讲 2.1信息加解密技术 2.1.1对称加密 概念:对称加密(又称为私人密钥加密/共享密钥加密) : 加密与解密使用同一密钥。特点:加密强度不高&#xff0c;但效率高;密钥分发困难。 (大量明文为了保证加密效率一般使用对称加密) 常见对称密钥加密算法:DES:…

行政快递管理高效化教程

能不能做好因公寄件管理&#xff0c;影响着企业内部运转的效率。我们知道&#xff0c;基本上每家企业的因公寄件&#xff0c;是由行政部门来统筹管理的...... 企业员工只知道&#xff0c;在公司寄快递&#xff0c;找行政。殊不知行政快递管理&#xff0c;不仅仅是“寄件”这么…

操作失误损失60亿美元,Excel还能是电脑上的常驻将军吗?

2013年&#xff0c;摩根大通交易员excel操作失误&#xff0c;造成公司损失60亿美元&#xff01;近40年来&#xff0c;excel一直是办公电脑上的常驻将军&#xff0c;甚至我们现在对表格的印象就是excel&#xff0c;为什么excel这么容易错误&#xff0c;这些年我们还是一直使用ex…

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集&#xff08;Actual Road dense image Dataset, ARD&#xff09;&#xff0c;通过专业的能见度计和多人标注&#xff0c;获得…

C++重载 强制类型转换运算符

文章目录 1.函数调用运算符重载2.强制类型转换运算符重载2.1对运算符的认识2.2类型强制转换运算符 1.函数调用运算符重载 class Display { public:void operator()(string text){cout << text << endl;}}; class Add { public:int operator()(int v1, int v2){ret…

在Win11上部署ChatGLM2-6B详细步骤--(上)准备工作

一&#xff1a;简单介绍 ChatGLM-6B是清华大学知识工程和数据挖掘小组&#xff08;Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University&#xff09;发布的一个开源的对话机器人。根据官方介绍&#xff0c;这是一个千亿参数规模的中英文语言模型。并…

C++继承总结(下)——菱形继承

一.什么是菱形继承 菱形继承是多继承的一种特殊情况&#xff0c;一个类有多个父类&#xff0c;这些父类又有相同的父类或者祖先类&#xff0c;那么该类就会有多份重复的成员&#xff0c;从而造成调用二义性和数据冗余。 class Person {public:Person(){cout << "P…

新手小白怎么选择配音软件?

现在的配音软件软件很多&#xff0c;各种类型的都比较多&#xff0c;对于新手小白来说不知该如何选择&#xff0c;今天就来给你分享几款好用的配音软件。不论是制作短视频还是制作平常音频都完全可以。 第一款&#xff1a;悦音配音 这是一款专业的视频配音软件&#xff0c;多端…

内存马概念

内存马概念 文章目录 内存马概念木马演变内存使用条件内存缺点JAVA Web三大组件Listener:监听器servelet请求流程内存马分类内存演示内存马植入方式案例shiro反序列化漏洞植入内存马 木马演变 内存使用条件 1. 禁止外联 2. 文件监控、查杀 3. spring Boot&#xff0c;不支持js…

【已解决】goland每次都自动删除我import的包

需要2步&#xff1a; 第一步&#xff1a;取消Optimize imports on the fly勾选 第二步&#xff1a;取消Optimize imports

IO进程及相关函数

什么是环境变量 http://t.csdnimg.cn/nPrMu 进程&#xff1a;是程序执行的一次执行过程&#xff0c;是动态&#xff0c;涉及到资源分配&#xff0c;包含创建、调度、执行 程序&#xff1a;存放在磁盘空间上的一个二进制文件&#xff0c;是指令集合&#xff0c;是静态的&#xf…

MacOS系统Chrome开发者模式下载在线视频

操作流程 # step1. 进入开发者模式 command option i # step2. 在搜索栏中搜索 getHttpVideoInfo.do?关键词 # step3. 在Preview的Json界面中找到video&#xff0c;然后选择不同resolution & duration的视频片段&#xff1b; # step4. 选择合适的video::chapters, 选择…

【鸿蒙软件开发】ArkTS基础组件之Marquee(文字跑马灯)、QRCode(二维码生成)

文章目录 前言一、Marquee组件1.1 子组件1.2 创建Marquee组件参数 1.3 属性1.4 事件1.5 示例代码 二、QRCode2.1 子组件2.2 接口2.3 参数2.4 属性2.5 事件2.6 示例代码 总结 前言 Marquee组件&#xff1a;跑马灯组件&#xff0c;用于滚动展示一段单行文本&#xff0c;仅当文本…

python+requests接口自动化测试框架

1、首先&#xff0c;我们先来理一下思路。 正常的接口测试流程是什么&#xff1f; 脑海里的反应是不是这样的&#xff1a; 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果&#xff08;有的需要数据库辅助&#xff09; —> 生成测试报…

算法通关村第三关-白银挑战双指针思想

大家好我是苏麟 , 今天带来算法第三关 . 本期大纲 元素奇偶移动专题 元素奇偶移动专题 描述 : 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 题目 : LeetCode 905.…

成人自考-英语二-连词

感谢内容提供者&#xff1a;金牛区吴迪软件开发工作室 接上一篇&#xff1a;成人自考-英语二-形容词 文章目录 一、连词分类1.并列连词-连接词与词、句与句&#xff08;1&#xff09;词 并列连词 词&#xff08;2&#xff09;句子1 并列连词 句子2 2.从属连词-连接从句&…

私有化部署企业IM即时通讯app,群聊多样化管控

随着企业内部沟通和协作的重要性不断增长&#xff0c;私有化部署企业即时通讯&#xff08;IM&#xff09;app成为了企业保护内部信息安全的一种重要手段。在这个领域&#xff0c;安全专属的移动数字化平台WorkPlus&#xff0c;支持私有化部署&#xff0c;涵盖即时通讯和办公应用…