C语言每日一题(37)两数相加

力扣网 2 两数相加

题目描述

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

思路分析

最基本的思路,就是将俩链表转正过来,相加后再进行逆序,实现是可以实现,但时间复杂度太高了,此外这里相加还涉及到进位的问题,这样做会很麻烦。

换一种思路,我们直接在现成的两个链表上操作,可以看到,相加后逆过来的值刚好就是对应的两个结点的相加,那我们可以直接遍历两个链表,将对应的值相加,并存放到新的结点里。

需要注意的事项:

1.这里会涉及到进位的问题,我们可以将相加后的值/10得到进位值(大于10的进位值为1,小于10的进位值为0)每次相加时加上进位值即可。

2.还会存在链表结点数不等的情况,我们将不存在的结点数的值视为0即可。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {struct ListNode* s1=l1;//遍历链表1的指针struct ListNode* s2=l2;//遍历链表2的指针struct ListNode* head=NULL,*tail=NULL;//新链表头结点指针和遍历链表的指针tailint carry=0;//进位值,最开始等于0while(s1||s2)//遍历两个链表,两个链表同时为空结束{int n1=s1?s1->val:0;//如果s1不为空取s1对应的值,空则视为0int n2=s2?s2->val:0;//如果s2不为空取s2对应的值,空则视为0int sum=n1+n2+carry;//和等于n1+n2+进位值if(head==NULL)//最开始头结点为空{head=tail=(struct ListNode*)malloc(sizeof(struct ListNode));//动态创建内存赋给头结点和遍历指针tail->val=sum%10;//将sum模10的值放到tail中tail->next=NULL;//tail->next置为空}else//头结点不为空的情况{tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));//动态创建内存赋给遍历指针的下一个结点(tail->next)->val=sum%10;//将sum模10的值赋给下一个结点的值tail=tail->next;//移动tailtail->next=NULL;//置空}carry=sum/10;//获得新的carry值if(s1)//s1不为空,s1往下走{s1=s1->next;}if(s2)s2不为空,s2往下走{s2=s2->next;}}if(carry>0)//遍历完成后,如果进位值不为零,还得往后面再添加一个结点存放进位值{tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));(tail->next)->val=carry;tail=tail->next;tail->next=NULL;}return head;//返回头结点
}

 

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

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

相关文章

遗传算法解决tsp问题(基于python)

目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码 1.遗传算法简要介绍 简单来说,遗传算法是用于解决最优化问题的一种搜索算法。其核心基于自然界种群进化的规律,即初始种群进行交配,在基因层面上&am…

elasticsearch 索引库操作和文档操作

文章目录 索引库操作mapping映射属性索引库的CRUD(创建,读取,更新,删除)创建索引库和映射基本语法:示例: 查询索引库修改索引库删除索引库 文档操作新增文档查询文档删除文档修改文档全量修改增…

数据结构 | 堆【图解】

数据结构 | 堆【图解】 文章目录 数据结构 | 堆【图解】堆的概念及结构堆的实现堆的初始化堆的插入【重点】堆的删除【重点】取堆顶的数据堆的数据个数堆的判空堆的销毁 全部代码 堆的概念及结构 堆(heap): 一种有特殊用途的数据结构——用来…

无人智能柜:经营成本低,运维智能化

在现代商业领域中,无人智能柜正逐渐崭露头角,成为一种具有前景的商业模式。其独特之处在于经营成本的低廉性和运维过程的智能化。相较于传统的便利店等实体店铺,无人智能柜在运营过程中不仅能够降低成本,还能够实现高效的运维管理…

【腾讯云云上实验室】向量数据库+LangChain+LLM搭建智慧辅导系统实践

目录 一、搭建智慧辅导系统——向量数据库实践指南1.1、创建向量数据库并新建集合1.2、使用 TKE 快速部署 ChatGLM1.3、部署 LangChain PyPDFVectorDB等组件1.4、配置知识库语料1.5、基于 VectorDB LLM 的智能辅导助手 二、LLM时代的次世代引擎——向量数据库2.1、向量数据库L…

【多线程】-- 02 线程创建之实现Runnable初识多线程并发问题

多线程 2 线程创建 2.2 实现Runnable接口 【学习提示】查看JDK帮助文档 定义MyRunnable类实现Runnable接口实现run()方法,编写线程执行体创建线程对象,调用start()方法启动线程 package com.duo.demo01;//创建线程方式二:实现Runnable接…

Mac开发环境——MacOSX安装与配置Anaconda与PyCharm详细流程

一、安装与使用Anaconda 1.简介 Anaconda 是一个用于数据科学、机器学习和科学计算的开源发行版和包管理器。有许多可用于数据处理、分析和建模的工具和库,并提供了一个方便的环境管理系统。Anaconda 包含了 Python 解释器和许多常用的 Python 包,以及…

Windows环境搭建

Windows环境搭建 一. jdk1.8安装1. 资源链接2. 安装3. 配置环境变量 一. jdk1.8安装 1. 资源链接 资源链接 提取码:tfms 2. 安装 1.双击下载好的JDK,点击下一步。 2.修改默认目录(可不修改),点击下一步, 3. 点击下…

医保线上购药系统:引领医疗新潮流

在科技的驱动下,医疗健康服务正经历一场数字化的革新。医保线上购药系统,不仅是一种医疗服务的新选择,更是技术代码为我们的健康管理带来的全新可能。本文将通过一些简单的技术代码示例,深入解析医保线上购药系统的工作原理和优势…

CleanMyMacX4.14.5macOS电脑系统免费清理工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

Altium Designer学习笔记13

0603电容封装的画法: 再画下三极管SOT-23的三极管的封装图: 画出三极管的封装图: 在画图的过程中,遇到了一个问题,画闭环线路的时候,就会被自动删除,查出是这个地方的配置需要进行修改。 那这个…

ConcurrentHashMap的数据结构+以及各个版本之间的区别

ConcurrentHashMap 1.7与1.8的区别 1、锁结构不同 2、put的流程不同 3、size的计算方式不同(1.8使用的使用basecell[]计算,有点类似于LongAdder,1.7使用三级通缉判断是否一样,不一样通过分段式加锁再求和) 4、数据结构不同,1.6 Re…