力扣|两数相加

news2024/11/17 23:39:48

先放题目:

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

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

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


下面是解析

我自己其实和官方给出的理解差不多,就是做一个求和,如果两个链表的长度不一致,就认为较短的链表高位均为0

基本思路就是创建一个链表,每一位保存进位标志和数1数2那一位分别对应的数值的和,然后更新进位标志,代码就借用官方给的了:

struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2) {
	struct ListNode *head = NULL, *tail = NULL;
	int carry = 0;
	while (l1 || l2) {
		int n1 = l1 ? l1->val : 0;
		int n2 = l2 ? l2->val : 0;
		int sum = n1 + n2 + carry;
		if (!head) {
			head = tail = malloc(sizeof(struct ListNode));
			tail->val = sum % 10;
			tail->next = NULL;
		} else {
			tail->next = malloc(sizeof(struct ListNode));
			tail->next->val = sum % 10;
			tail = tail->next;
			tail->next = NULL;
		}
		carry = sum / 10;
		if (l1) {
			l1 = l1->next;
		}
		if (l2) {
			l2 = l2->next;
		}
	}
	if (carry > 0) {
		tail->next = malloc(sizeof(struct ListNode));
		tail->next->val = carry;
		tail->next->next = NULL;
	}
	return head;
}

接下来细细解释:

首先是链表的运用

链表在初始化一个节点的时候,用的语句是

struct ListNode *head = NULL, *tail = NULL;
head = tail = malloc(sizeof(struct ListNode));

一般来说,每一次新建一个节点,都要顺手设置为NULL,保持良好的编程习惯

但是只是声明变量时是没有分配存储空间的,要用malloc分配对应的存储空间

之后,我们需要建立进位标识,因为加法会出现进位,进位标识的值应当是和除以10的余数

int carry = 0;
carry = sum / 10;

和来自于这一位对应求和加上进位:

int sum = n1 + n2 + carry;

重中之重是链表的使用,每一节点的next参数,储存下一节点的位置,也就是通过next访问下一节点

在和链表为空时,我们需要首先给链表分配一个空间,并完成链表的初始赋值,设置下一节点为NULL:

head = tail = malloc(sizeof(struct ListNode));
tail->val = sum % 10;
tail->next = NULL;

等到链表中有了一个节点,接下来分配存储空间的时候,就可以直接指定next为新节点的坐标:

tail->next = malloc(sizeof(struct ListNode));

然后对新节点进行赋值,必须始终记得设置next为NULL;

tail->next->val = sum % 10;
tail = tail->next;
tail->next = NULL;

最后判断两个链表到了什么位置,是否到了链表结尾:

if (l1) {
	l1 = l1->next;
		}
if (l2) {
    l2 = l2->next;
		}

在这个逻辑里面,如果第一个链表到了结尾,就将另一个链表向后移动,

这样,结合循环开头的代码:

int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;

会将已经到结尾的链表对应的n设置为0,另一个正常读取

最后看是否有进位:

if (carry > 0) {
	tail->next = malloc(sizeof(struct ListNode));
	tail->next->val = carry;
	tail->next->next = NULL;
}

程序结束。

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

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

相关文章

敏捷开发方法:快速响应需求变化的开发流程

在快速变化的技术和市场环境下&#xff0c;传统的软件开发方法可能显得笨重和不灵活。敏捷开发方法应运而生&#xff0c;以其快速响应需求变化、持续交付和团队协作的特点&#xff0c;成为现代软件开发的重要方法之一。本文将深入探讨敏捷开发方法的概念、原则、流程以及在实际…

《王道24数据结构》课后应用题——第三章 栈和队列

第三章 【3.1】 03、 假设以I和O分别表示入栈和出操作。栈的初态和终态均为空&#xff0c;入栈和出栈的操作序列可表示为仅由I和O组成的序列&#xff0c;可以操作的序列称为合法序列&#xff0c;否则称为非法序列。 如IOIIOIOO 和IIIOOIOO是合法的&#xff0c;而IOOIOIIO和II…

maven基础学习

什么是maven 构建 依赖 maven核心概念坐标 在黑窗口使用maven命令生成maven工程 pom.xml 想导入哪个jar包把它的坐标放到dependency里就可以 maven核心概念POM maven核心概念约定的目录结构 执行maven的构建命令 清理操作&#xff0c;clean 编译操作 compile 测试操作 test 打包…

ElasticSearch进阶

一、 search检索文档 ES支持两种基本方式检索&#xff1b; 通过REST request uri 发送搜索参数 &#xff08;uri 检索参数&#xff09;&#xff1b;通过REST request body 来发送它们&#xff08;uri请求体&#xff09;&#xff1b; 1、信息检索 API&#xff1a; https://w…

Mybatis的关联关系配置一对一,一对多,多对多的映射关系

目录 关联关系映射 一对一关联&#xff1a; 一对多关联&#xff1a; 多对多关联&#xff1a; 导入数据库表 一对多 一对一 多对多 关联关系映射 关联关系映射在Mybatis中主要通过三种方式实现&#xff1a;一对一关联和一对多关联及多对多关联。 一对一关联&#xff1a;…

算法 数据结构 双向环形链表 手撸环形链表 环形链表实现容器 环形链表添加修改删除获取大小 环形链表实现自定义容器 手撸容器 双向环形哨兵链表 算法(六)

1. 环形链表&#xff1a; 2. 建议先不要看我写得自己先实现下&#xff0c;只将Node内部类复制自己命名得容器内&#xff0c; 实现方法&#xff1a; a. add方法&#xff08;添加到头部&#xff0c;尾部添加&#xff0c;指定位置添加&#xff09; b. get方法&#xff08;获取首部…

OpenCV(二十):图像卷积

1.图像卷积原理 图像卷积是一种在图像上应用卷积核的操作。卷积核是一个小的窗口矩阵&#xff0c;它通过在图像上滑动并与图像的像素进行逐元素相乘&#xff0c;然后求和来计算新图像中每个像素的值。通过滑动卷积核并在图像上进行逐像素运算&#xff0c;可以实现一系列图像处理…

Laravel 模型的关联查询 Debugbar 调试器 模型的预加载 ⑩②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

2023高教社杯数学建模A题B题C题D题E题思路模型 国赛建模思路分享

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

Re45:读论文 GPT-1 Improving Language Understanding by Generative Pre-Training

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Improving Language Understanding by Generative Pre-Training 论文下载地址&#xff1a;https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 本文是2018年OpenAI的工作&#xff0c…

智慧班牌全套源代码 智慧班牌人脸识别云平台源码

智慧校园云平台电子班牌系统源码&#xff0c;系统架构&#xff1a;Javavue2springbootMySQL elmentuiQuartzjpajwt 智慧校园建设在近年来已经形成主流&#xff0c;不少地区等级的学校都在不同程度地进行校园信息化建设优化&#xff0c;比如把人脸识别门禁应用到校门口、宿舍门口…

网站edge -- 油猴 -> IDM

一、百度网盘限速 未解决 软件&#xff1a;IDM 安装路径&#xff1a; 1.1如果&#xff1a;edge 出问题打不开其他网站&#xff0c; 解决方法&#xff1a; 以管理员的身份&#xff0c;右击载这个软件&#xff0c;就好了 1.2使用这个软件 应该是右击这个软件 以管理员的身…

VMware设置,降低Win11系统内存的使用

编辑虚拟机设置 设置处理器和内存&#xff0c;建议内存不大于4096 设置常规&#xff0c;选择客户机操作系统为Windows 高级选项&#xff0c;设置固件类型为UEFI

K8S 基础概念学习

1.K8S 通过Deployment 实现滚动发布&#xff0c;比如左边的ReplicatSet 的 pod 中 是V1版本的镜像&#xff0c;Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器&#xff0c;他会连接本pod中的其他容器&#xff0c;实现互通。p…

Java 几个基本数据类型长度

对 Java 来说&#xff0c;我们通常会有下面几个基本数据类型。 需要了解的一个定义是&#xff0c;一个字节&#xff08;byte&#xff09; 是 8 位&#xff08;Bit&#xff09;。 针对 Java 的所有数据类型&#xff0c;最小的是 1 个字节&#xff0c;最多的是 8 个字节 数据长…

【Windows操作系统】Windows10升级时报VirtualBox错误导致升级失败

【背景】 明明已经卸载了VirtualBox&#xff0c;但是Win10升级时依然报错&#xff1a;VirtualBox阻止升级导致升级失败。 【分析】 说明电脑中存在VirtualBox残余&#xff0c;但是这些参与虽然能被升级程序检测到却不能在卸载VirtualBox时自动关联删除&#xff0c;需要找到…

Python实现Word、Excel、PPT批量转为PDF

今天看见了一个有意思的脚本Python批量实现Word、EXCLE、PPT转PDF文件。 因为我平时word用的比较的多&#xff0c;所以深有体会&#xff0c;具体怎么实现的我们就不讨论了&#xff0c;因为这个去学了也没什么提升&#xff0c;不然也不会当作脚本了。这里我将其放入了pyzjr库中…

如何移除 ONLYOFFICE 中的插件

如果您需要移除 ONLYOFFICE 编辑器中的某个甚至所有的插件&#xff0c;本文会向您介绍如何操作。如要详细了解&#xff0c;请阅读本文。 为什么会想移除插件 ONLYOFFICE 用户想知道如何删除插件&#xff0c;隐私问题是主要原因之一。有些插件&#xff08;如照片编辑器&#xf…

C++零碎记录(四)

6. 深拷贝与浅拷贝 ① 浅拷贝&#xff1a;简单的赋值拷贝操作。 ② 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作。 ③ 浅拷贝&#xff0c;如下图所示&#xff0c;带来的问题就是堆区的内存重复释放。 ④ 深拷贝&#xff0c;如下图所示&#xff0c;在堆区…

Cyber RT学习笔记---7、Component组件认知与实践

7、Component组件认知与实践 前言 本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分&#xff0c;还请大家多多指出。 课程地址: https://apollo.baidu.com/community/course/outline/329?activeId10200 更多还请参考: [1] Apollo星火计划学习笔记——第…