(002)两数相加

news2024/11/13 13:06:17

思路分析:

类似于一个大数加法,注意链表的边界和进位,同时还有注意存在两个链表长度不等,需要处理多出来的元素

代码实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //新建一个链表用来记录答案,head用来返回 p用来动态记录加法在新链表中的数字
        ListNode* head = NULL;
        ListNode* p = NULL;
        int a = 0;  //用来表示进位
        while(l1 != NULL && l2 != NULL)
        {
            //两个链表都存在,数字两两相加
            int sum = l1 -> val + l2 -> val + a;
            //记录个位数
            if(p == NULL)
                p = new ListNode(sum % 10);
            else
            {
                p -> next = new ListNode(sum % 10);
                p = p -> next;
            }
            if(head == NULL)
                head = p;
            //计算进位
            a = sum / 10;
            l1 = l1 -> next;
            l2 = l2 -> next;
        }
        //记录某一个链表计算完毕,剩余链表元素直接放入新链表,不要遗漏进位
        while(l1 != NULL)
        {
            p -> next = new ListNode();
            p -> next -> val = (l1 -> val + a) % 10;
            a = (l1 -> val + a) / 10;
            p = p -> next;
            l1 = l1 -> next;
        }

        while(l2 != NULL)
        {
            p -> next = new ListNode();
            p -> next -> val = (l2 -> val + a) % 10;
            a = (l2 -> val + a) / 10;
            p = p -> next;
            l2 = l2 -> next;
        }
        //两个链表元素计算完毕,可能存在进位,不要遗漏
        if(a != 0)
        {
            p -> next = new ListNode(a);
        }
        return head;
    }
};

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

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

相关文章

PDF发票解析并将信息回填到前端(1)后端解析PDF

文章目录 参考文章技术栈需求解析发票类型 1. 最终项目结构1.1 说明 2. 相关代码2.1 导入相应的maven依赖2.2 实体类2.3 工具类2.4 三层架构controllerservicemapper 参考文章 参考文章 技术栈 SpringBootVue 需求 本文主要是实现提取发票中的部分内容,并实现自…

单调栈② | Java | LeetCode 接雨水 最大的矩形

42. 接雨水 暴力法 for循环遍历每一个柱子,内层for循环找到左边和右边比它高的柱子 时间复杂度 n^2 优化:添加一个预处理 定义一个数组,存放该柱子右边比他高的柱子是哪一个 再用一个数组,存放该柱子左边比他高的柱子是哪一个 …

html页面下载及多html文件合成单pdf方法

1,html页面下载 ~1,首先在edge中微软扩展商店搜索 “SingleFile”添加扩展 浏览器右上角点击扩展按钮 下拉菜单选择管理扩展 点击 获取 Microsoft Edge 扩展 进入微软商店搜索 “singlefile” 点击获取 点击浏览器右上角扩展按钮,…

IPv4 vs IPv6:了解这两大协议的关键差异

我发现,很多找代理IP的朋友在后台问我的问题都很相似!都被配置IP的最后一步:选择IPv4还是IPv6?给难住了。昨晚我一晚没睡,终于整理出对IPv4和IPv6的对比总结,从概念阐述到特点对比,再解答IPv6总…

利用 IP 地址进行社交工程攻击?

社交工程攻击是网络安全的主要威胁之一。现在攻击者不再仅依赖技术漏洞,而是想利用人性的弱点来获取有价值的信息或实现非法目的。 IP 地址在社交工程攻击中的作用 定位和伪装获取目标用户的 IP 地址,大致确定目标用户地理位置,然后伪装成当…

spring原理(自学第六天)

Aware 接口及 InitializingBean 接口 今天将会学到Aware 接口及 InitializingBean 接口 我们可以先了解他们的作用: 1. Aware 接口用于注入一些与容器相关信息, 例如 a. BeanNameAware 注入 bean 的名字 b. BeanFactoryAware 注入…

解锁LLM应用潜能:提示工程的39种方法与应用全解析!

大型语言模型(LLMs)在许多不同的自然语言处理(NLP)任务上表现出了显著的性能。提示工程在提升LLMs已有能力方面发挥着关键作用,使其在各种NLP任务上取得了显著的性能提升。提示工程需要编写自然语言指令,即…

QT 应用程序输出中文乱码

一 ,选择文本编码 1. 点击编辑再点击Select Encoding选择编码 2 .在弹出的窗口,选择UTF-8再点击按编码保存即可 3. 重新编译,可以发现中文乱码问题解决

Spring源码解析(28)之AOP的核心对象创建过程总结

一、总结图 二、总结 以上是对AOP核心对象创建的一个总结,接下来我们分点介绍我们自从定义了aop.xml之后,spring在启动的时候是怎么创建了这些核心对象的。 启动spring容器之后,其实核心是是refresh方法,refresh的13个核心方法&…

CTFHub——XSS——反射型

1、反射型: 发现为表单式,猜测哪个可能存在注入漏洞,分别做测试注入发现name框存在xss漏洞 输入发现有回显但不是对方cookie,参考wp发现要用xss线上平台 将xss平台测试语句注入,将得到的url编码地址填入url框&#xf…

Lineage凌骥电源模块维修CP2725AC54Z

Lineage Power交换机电源常见维修型号有: CAR2024FPZ0-1A、CP2725AC54TEZ、AXA005A0X-SRZ、APXW005A0X3-SRZ、AXA016A0X3-SRZ、EP3000AC48TE、CP3000AC54TEZ、 CP3000AC54TEZ、QBDW033A0B641Z及EP4848系列直流电源维修等。 凌骥电源维修实践中,有许多开关…

【OpenCV C++20 学习笔记】击中击不中(Hit-or-Miss)

击中击不中 Hit-or-Miss 原理代码实现 原理 形态学操作对图片的处理是基于图片的形状的。形态学操作将一个或多个结构元素(structuring elements),即卷积核,应用到图片上从而获得计算结果。最基本的两个形态学操作就是腐蚀(erosion)和膨胀(dilation)。这…

7 时间序列单特征:多输入->多输出(LSTM/GRU/TCN)

今天看到关于时间序列预测知识点,竟然要收费!本着开源第一的思想,自己也找到相关的代码尝试一下写几个通用的模版。 模型想要 输入:Input (input_size, hidden_size),其中:input_size time_stemp,因为是单个变量因此…

从实现第一个ArkTs应用开始入门

前言 新建了个鸿蒙学习项目,后续持续学习会把代码放到这里来:鸿蒙项目仓库学习实践版 基本概念 从HarmonyOS NEXT Developer Preview1(API 11)版本开始,HarmonyOS SDK以Kit维度提供了六大领域的开放能力, 包括: 应用…

800G FR4解决方案:高速数据传输的理想选择

随着业务规模的扩大,数据中心面临着越来越多的数据处理需求。虚拟化、物联网(IoT)和云计算等数据密集型应用推动了数据中心流量的不断增长,从而提升了对大容量800G解决方案的市场需求。因此,新建800G数据中心&#xff…

marker - PDF 转 markdown

文章目录 一、关于 marker特点它是如何工作的例子性能商业用途托管API限制 二、安装Optional: OCRMyPDF 三、用法1、配置转换单个文件转换多个文件在多个GPU上转换多个文件 三、故障排除四、有用的设置五、基准测试速度精度吞吐量 六、运行自己的基准测试七、感谢 一、关于 mar…

C++初学(9)

9.1、结构简介 虽然数组能够和存储多个元素,但所有元素必须相同,也就是说,同一个数组不能既存放int类型也存放float类型,而C的结构可以满足要求。结构是一种比数组更灵活的数据格式,因为同一个结构可以存储多种类型的…

防御笔记第九天(持续更新)

注意:攻击可能只是一个点,而防御需要全方面进行。 1.IAE引擎 2.DPI DPI ----深度包检测 --- 针对完整的数据包,进行内容的识别和检测 3.基于特征字的检测技术 4,基于应用网关的检测技术 基于应用网关的检测技术 --- 有些应用控…

数据库方言

数据库方言,也称数据库领域特定语言(DSL),是针对特定数据库系统的专有扩展或子集,它允许用户在特定环境内使用更高效、更简洁的查询语句。 关键字(Keywords) 关键字是数据库方言中预定义的单词&…

Windows 安装Redis7.4版本图文教程

本章教程,主要介绍如何在Windows上安装Redis7.4版本的Redis,并以服务方式实现开机自启动。 1、下载安装包 通过百度网盘分享的文件:Redis-7.4.0-Windows-x64-cygwin-with-Service.zip 链接:https://pan.baidu.com/s/1NFGXrCwumDzl…