【算法】链表:2.两数相加(medium)+模拟

 系列专栏

《分治》

《模拟》

《Linux》


目录

1、题目链接 

2、题目介绍

3、解法 (模拟)

4、代码


 

1、题目链接 

2. 两数相加 - 力扣(LeetCode)

2、题目介绍

3、解法 (模拟)

  1. 理解题目要求
    • 我们有两个链表,每个链表代表一个逆序存储的非负整数。
    • 我们需要将这两个数相加,并以相同的形式(逆序链表)返回结果。
  2. 初始化
    • 创建两个指针 cur1 和 cur2 分别指向两个链表的头节点。
    • 创建一个新的链表 l3 来存储结果,并且为了方便操作,我们使用一个哑节点 dummy,其 next 指向 l3。哑节点的作用是方便处理边界情况,最后返回结果时只需返回 dummy->next
    • 初始化一个变量 num 来保存进位值,初始为 0。
  3. 遍历链表
    • 使用一个 while 循环来遍历两个链表,条件是 cur1 或 cur2 不为空,或者 num(进位值)不为 0。
    • 在每次循环中,如果 cur1 为空,则将 a 设为 0;如果 cur2 为空,则将 b 设为 0。这样做是为了处理链表长度不一致的情况。
    • 计算当前位的和 sum = a + b + num
  4. 处理进位和创建新节点
    • 计算新的进位值 num = sum / 10
    • 计算当前位的值 sum %= 10,这是实际要添加到结果链表中的值。
    • 在 l3 后面创建一个新节点,其值为 sum,然后移动 l3 指针到这个新节点。
  5. 移动指针
    • 如果 cur1 不为空,将其移动到下一个节点。
    • 如果 cur2 不为空,将其移动到下一个节点。
  6. 返回结果
    • 循环结束后,返回 dummy->next,即跳过了哑节点,返回的是实际存储结果的链表的头节点。

这种方法的时间复杂度是 O(max(m, n)),其中 m 和 n 分别是两个链表的长度,因为我们最多遍历两个链表各一次。空间复杂度是 O(max(m, n)),因为我们需要创建一个新的链表来存储结果,其长度最多与较长的链表相同。

4、代码

/*** 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) {//两个链表肯定不为空ListNode* cur1 = l1;ListNode* cur2 = l2;ListNode* l3 = new ListNode(0);//新链表,创建一个头节点ListNode* dummy = l3;int num = 0;while (cur1 != NULL || cur2 != NULL || num)    //需要考虑进位,加到最后,有进位还需要进一步创建新的节点{int sum = 0;//每位上的求和int a = cur1 == nullptr ? 0 : cur1->val;int b = cur2 == nullptr ? 0 : cur2->val;sum = a + b + num;//加上,上一次和的进位(0/1)//处理进位num = sum / 10;sum %= 10;//无论是否进位,%都不影响结果//添加元素l3->next = new ListNode(sum);l3 = l3->next;if(cur2!=NULL)cur2 = cur2->next;if (cur1 != NULL)cur1 = cur1->next;}return dummy->next;}
};

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

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

相关文章

51单片机-第十四节-AD/DA(XPT2046触摸屏)

一、AD/DA介绍: AD:模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。 DA:数字-模拟转换,将计算机输出的数字信号转换为模拟信号。 二、运算放大器: 1.介绍: (1&#xf…

给网站加加速!下一代CDN(EdgeOne/边缘安全加速)使用与配置体验

随着访问量的增加和用户需求的多样化,服务器的带宽有限,面对一些图片数据,显得“力不从心”。CDN技术,就很好的解决了这个问题,但是价格也是用户思考的问题。 EdgeOne不仅继承了传统CDN的核心优势,更在速度…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

【用户管理 添加用户 超级用户 用户和组】

用户管理 添加用户超级用户用户和组 添加用户 介绍用户的管理操作 比如,添加一个用户 sudo useradd -m test1 其中,sudo表示管理员身份运行 修改用户密码 sudo passwd test1 删除用户 sudo userdel test 超级用户 1.首次使用时,需要给roo…

以光塑形:光固化3D打印机原理图文解析

公众号端: 光固化打印机介绍https://mp.weixin.qq.com/s?__bizMzkwMjc0MTE3Mw&mid2247484073&idx1&sn0d0fd026b373b06cd7c340ec8f56a006&chksmc0a1af73f7d62665a632baebbde4e5e00ffb9c6bd31bf547b4a86855d5524535619a6175a428#rd 光固化打印机…

IDEA上Mybatis介绍和使用

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。 创建项目 在springboot项目中添加Mybatis和MySQL依赖项。 找到数据库选项,点击新建 -> 数据库源,选择MySQL。 输入完成信息后,可以先进行测试,可以成功连接再…

逻辑回归LogisticRegression

一、逻辑回归的基础介绍 逻辑回归是一个分类模型 它可以用来预测某件事发生是否能够发生。分类问题是生活中最常见的问题: 生活中:比如预测上证指数明天是否会上涨,明天某个地区是否会下雨,西瓜是否熟了 金融领域:…

p20 docker自己commit一个镜像 p21 容器数据卷 p22mysql同步数据(国内镜像被封锁暂时往后放)p23具名挂载和匿名挂载

如何自己commit一个镜像 这里还是先引用一下老师的笔记 关于如何自己commit一个镜像这个问题目前因为从仓库中拉下来的Tomcat里面是没有项目的,所以把webapps.dist里面的拷贝到webapps里面去作为自己的镜像在commit一下 这里用Tomcat举例子首先把镜像拉取下来执…

MySql数据库---存储过程

存储过程概念 MySQL 5.0 版本开始支持存储过程。 简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数; 存储过就是数据库 SQL 语言…

多项目管理怎么进行❓看这篇就够了

多项目管理是一个复杂而细致的过程,涉及多个项目的同时进行和协调。首先,明确每个项目的目标和范围至关重要。在项目开始之初,应对所有项目进行全面评估,确定其战略价值、影响范围和资源需求。这有助于为每个项目设定清晰的优先级…

反应香精市场报告:预计2030年全球市场规模将达到264.3亿美元

“反应香精”通常是指通过在食品或饮料加工过程中发生的物理、化学或酶反应而产生的风味剂。可以有意添加这些香料以增强最终产品的味道、香气或其他感官方面。它们通常用于食品和饮料行业,以保持一致性、提高适口性或创造独特的风味特征。生产工艺香料的方法有多种…

新网站做谷歌SEO为什么短期内很难看到显著效果?

对于一个全新的网站来说,SEO的效果往往不会在短期内显现。这是因为SEO需要时间来积累权重和信任度。谷歌对新网站通常会有一个观察期,在这段时间内,网站的表现不稳定,排名也会波动较大,这是正常情况,这时候…

excel表格转换为在线成绩查询怎么制作?

在当前“双减”政策的背景下,学生的考试成绩不再被公开展示,这是对学生隐私的一种保护。然而,这同时也带来了一个新的问题:家长们对于孩子成绩的关切并未减少,他们依然迫切想要了解孩子的学习情况。以往,成…

使用Provide和Inject设计Vue3插件

使用provide和inject的Vue依赖项注入非常适合构建Vue3插件或避免prop多层传递。 尽管不经常使用它,但是您可以仅使用两个内置方法来实现依赖项注入:provide和inject。 查看Composition API文档,在Vue 3.0中,使用Provide和Inject进…

深度学习:循环神经网络—RNN的原理

传统神经网络存在的问题? 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。 RNN神经网络 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络。在处理序列输入时具有记忆性…

基于RSSI原理的蓝牙定位程序(matlab代码,3维空间、基站数量>3即可,可自适应)

目录 商品描述 商品描述 这款基于接收信号强度指示(RSSI)原理的蓝牙定位程序,专为需要高效、可靠定位解决方案的开发者和研究人员设计。无论是在室内环境还是复杂的三维空间,该程序都能通过N个蓝牙锚点,实现对未知点的…

20.安卓逆向-frida基础-hook分析调试技巧2-hookDES

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

【在Linux世界中追寻伟大的One Piece】DNS与ICMP

目录 1 -> DNS(Domain Name System) 1.1 -> DNS背景 2 -> 域名简介 2.1 -> 域名解析过程 3 -> 使用dig工具分析DNS 4 -> ICMP协议 4.1 -> ICMP功能 4.2 -> ICMP报文格式 4.3 -> Ping命令 4.4 -> traceroute命令 1 -> DNS(Domain Na…

HTB:Markup[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of Apache is running on the targets port 80? 2.What username:password combination logs in successfully? 使用Yakit并使用TOP1000字典对密码进行爆破 3.What is the word at the top of the page that accepts use…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]:获取数组的第2个元素。 names[1:3]:获取数组的第2、第3个元素。包含左侧,不包含右侧。 names[:3]等同于names[0:3]&…