C/C++ BM11 链表相加(二)

文章目录

  • 前言
  • 题目
  • 解决方案一
    • 1.1 思路阐述
    • 1.2 源码
  • 总结

前言

这道题使用链表来实现加法运算,主要是涉及到数据对位以及加法进位的处理。


题目

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
数据范围: 0 ≤ n , m ≤ 1000000 0≤n,m≤1000000 0n,m1000000,链表任意值 0 ≤ v a l ≤ 9 0≤val≤9 0val9
要求:空间复杂度 O ( n ) O(n) O(n),时间复杂度 O ( n ) O(n) O(n)

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
在这里插入图片描述示例1
输入:[9,3,7],[6,3]
返回值:{1,0,0,0}
说明:如题面解释

示例2
输入:[0],[6,3]
返回值:{6,3}

备注:
1 ≤ n , m ≤ 1 0 6 1≤n,m≤10^6 1n,m106
0 ≤ a i , b i ≤ 9 0≤ai,bi≤9 0ai,bi9

解决方案一

1.1 思路阐述

加法运算一般是个位个位相加,十位十位相加…。也就是说数据要对位才可以相加,就如同题目中给出的加法运算的标准列式计算。

但是对于被加数和加数之间,由于它们是由两个链表存储,由于两个数之间的位数的大小不一样,所以链表存储的节点个数不一样,如果按照从左往右的顺序进行运算,我们可以看到题目给的图中的情况,9和6会相加,但是实际上是900+60这种,位数并不对应。应该执行的操作应该是900+0,30+60。

但是由于链表最后一个存储的节点一定是个位数,往左依次是十位百位,所以在链表中我们可以考虑从右往左的顺序,但是这与我们所用的加法运算的顺序(从左往右)相反,这时候可以使用链表倒置,对于最后的结果再次倒置即为我们所需要的链表。

关于链表倒置参考博客:C/C++ BM1反转链表

两数相加,逢十进一,这里我们设置了一个进位carry。

对于节点,我们首先判断节点是否为空,如果为空,则取0值作为运算数据。(这里相当于补0操作)
如果不为空则把节点的值传递给运算值。

1.2 源码

class Solution {public:ListNode* addInList(ListNode* head1, ListNode* head2) {head1 = reverseList(head1);head2 = reverseList(head2);//添加表头ListNode* res = new ListNode(-1);ListNode* head = res;int carry = 0;while (head1 != NULL || head2 != NULL || carry != 0) {//链表不为空则取其值int val1 = head1 == NULL ? 0 : head1->val;int val2 = head2 == NULL ? 0 : head2->val;//相加int temp = val1 + val2 + carry;//获取进位carry = temp / 10;temp %= 10;//添加元素head->next = new ListNode(temp);head = head->next;//移动下一个if (head1 != NULL)head1 = head1->next;if (head2 != NULL)head2 = head2->next;}return reverseList(res->next); }ListNode* reverseList(ListNode* head) {if (!head) {return nullptr;}ListNode* pre = nullptr;ListNode* current = head;while (current) {ListNode* temp = current->next;current->next = pre;pre = current;current = temp;}return pre;}
};

总结

这道题回顾了一下链表翻转。

对于链表的四则运算涉及到对位情况,考虑使用翻转链表会更好。不能按照常规的四则运算从左到右的顺序来做,要结合链表本身的特性来做。

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

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

相关文章

使用C# Net6连接国产达梦数据库记录

达梦官网:http://www.dameng.com/ 1 下载达梦并进行安装 下载地址:官网首页——服务与合作——下载中心(https://www.dameng.com/list_103.html) 根据需要自行下载需要的版本,测试版本为:x86 win64 DM8版…

微信商户平台:如何查看超级管理员

如果有普通员工身份,可以登录 https://pay.weixin.qq.com/index.php/core/account/info 扫码进入后,进入菜单:账户中心》商户信息, 即可看到超级管理员的信息。

Windows 重启 explorer 的正确做法

目录 一、关于 Restart Manager 二、重启管理器实例 三、完整实现代码和测试 本文属于原创文章,转载请注明出处: https://blog.csdn.net/qq_59075481/article/details/136179191。 我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者…

VsCode指定插件安装目录

VsCode指定插件安装目录 VsCode安装的默认目录是在用户目录(%HomePath%)下的.vscode文件夹下的extensions目录下,随着安装插件越来越多会占用大量C盘空间。 指定VsCode的插件目录 Vscode安装目录: D:\Microsoft VS Code\Code.exeVscode插件安装目录&a…

算法沉淀——递归(leetcode真题剖析)

算法沉淀——递归 01.汉诺塔问题02.合并两个有序链表03.反转链表04.两两交换链表中的节点05.Pow(x, n) 递归是一种通过调用自身的方式来解决问题的算法。在递归算法中,问题被分解为更小的相似子问题,然后通过对这些子问题的解进行组合来解决原始问题。递…

firewall防火墙配置实战

基本操作 服务启停操作 #停止firewall systemctl stop firewalld #禁止firewall开机启动 systemctl disable firewalld #开启firewall systemctl start firewalld #开机启动防火墙 systemctl enable firewalld # 查看防火墙状态 firewall-cmd --state systemctl status f…

springboot文件上传需要的配置

总结一下文件上传需要的配置信息: ①在springboot的配置文件中指定请求大小及文件大小,默认大小较小,可能不够 spring.servlet.multipart.max-file-size512MB spring.servlet.multipart.max-request-size512MB ②在springboot的配置文件中…

实现VLAN间通信以太网链路聚合与交换机堆叠、集群华为ICT网络赛道

10.实现VLAN间通信 10.1.使用路由器实现VLAN间通信 使用路由器物理接口 路由器三层接口作为网关,转发本网段前往其它网段的流量。 路由器三层接口无法处理携带VLAN Tag的数据帧,因此交换机上联路由器的接口需配置为Access. 路由器的一个物理接口作为一…

easyx devc++ 开发具有导出文件夹DLC的瓦片地图编辑器

1. F1保存为 DLC 输出为当前文件目录下。 2. 瓦片的边框利用绘制到 -1 -1 把边框绘制到外部 3. 利用 1 实现网格保留 #include <graphics.h> #include <stdio.h> #include <string.h> #include <io.h> // 保存游戏地图贴图数据 void savegamemap(in…

python常见的数据类型与数据结构(一)数字类型 字符串类型 布尔类型 列表 集合 字典 的定义与常规操作方法

python常见的数据类型与数据结构&#xff08;一&#xff09;数字类型 字符串类型 布尔类型 列表 集合 字典 的定义与常规操作方法 数据类型数字类型字符串类型布尔类型 数据结构列表集合字典 数据类型 数字类型 数字类型有int(整数)&#xff0c;float(浮点数)和complex(复数型…

异步任务超时机制

目录 1、Thread.Join(timeout) 2、Task.WhenAny(task,Task.Delay(timeout)) 3、WaitAsync(timeout) 需主动取消 4、CancellationTokenSource(timeout) 1、Thread.Join(timeout) var thread new Thread(() > {try {Console.WriteLine("Foo start...");Thread…

vue 使用docx库生成word表格文档

在Vue.js中生成Word表格文档&#xff0c;可以通过前端库来实现。这些库可以帮助我们轻松地将HTML表格转换为Word文档&#xff08;通常是.docx格式&#xff09;。以下是一些流行的前端库&#xff0c;它们可以用于在Vue项目中生成Word表格文档&#xff1a; docx…

保险购买的渠道

买保险的渠道 1.代理人。这个是保险公司传统的渠道&#xff0c;代理人的队伍非常庞大&#xff0c;许多人都碰到过保险代理人。 保险代理人的优势是"线下""1对1"&#xff0c;业务员如果非常专业&#xff0c;就能够给我们提供非常好的体验。由于大多数人接…

跨境电商无货源如何实现自动化对接1688货源商品上架?1688商品采集API来帮你

阿里巴巴集团旗下的B2B电子商务网站&#xff0c;提供海量优质商品&#xff0c;为采购商和供应商提供交流、合作、采购等服务&#xff0c;是很多没有货源优势的电商卖家首选的货源途径&#xff0c;也是国内最大、货源种类最齐全的货源网站。 不少做跨境电商无货源的朋友都想要直…

优思学院|精益思想如何识别价值流?【案例分析】

精益思想是一种为了提高效率、减少浪费的管理哲学&#xff0c;精益思想强调在整个生产过程中识别并消除一切不创造价值的步骤。 价值流分析是精益思想中的一个核心概念&#xff0c;通过深入分析特定产品从原材料到最终交付给顾客的全过程&#xff0c;来识别并削减浪费&#xf…

Win11专业版安装集成了谷歌框架的安卓子系统,包含谷歌商店

1.摘要 上一篇博客讲述了使用微软商店安装安卓子系统的教程 https://blog.csdn.net/RudeTomatoes/article/details/135958882 上述方法的优点是安装过程简单&#xff0c;但是&#xff0c;由于Windows安卓子系统是微软与亚马逊联合开发&#xff0c;默认没有安装谷歌框架。我尝试…

实现一个Windows环境一键启停Oracle的bat脚本

Oracle数据库有许多优点,其中一些最重要的包括: 可靠性和稳定性: Oracle数据库经过长期的发展和测试,被广泛认为是非常可靠和稳定的数据库管理系统。它在大型企业和关键业务环境中被广泛应用,能够处理高负载和大规模的数据。 高性能: Oracle数据库具有优化的查询处理器和…

Pytorch框架-----torch.tensor(创建张量)

文章目录 前言一、torch.Tensor二、构建tensor1.从Python的list或序列构建2.空张量3.索引和切片来获取和修改一个张量tensor中的内容 前言 torch.Tensor 是包的核心类。如果将其属性 .requires_grad 设置为 True&#xff0c;则会开始跟踪针对 tensor的所有操作。完成计算后&am…

线程相关整理

一 常用的线程手段 1 synchronized 有方法&#xff0c;和方法块&#xff0c;新的java版本 内部实现已经包含了多种方案&#xff0c;并动态调整方案&#xff0c;因此不是特别需求的化&#xff0c;建议直接用此方式 2 reentrantlock 可以构造公平锁 以上两种 代码片段应该是没得选…

开箱即用之 redis键值失效通知后端进行业务操作

引入redis依赖 <!--Spring boot Redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>配置类编写 import com.alibaba.fastjson.support.sp…