两个链表相加

news/2024/5/12 23:47:45/文章来源:https://blog.csdn.net/jingerppp/article/details/131186756

描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

数据范围:0≤n,m≤1000000,链表任意值 0≤val≤9
要求:空间复杂度 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}

 

解题思路:

其实,看到这个题目,首先想到的是将链表逐个逐个取出,组成一个数字,然后通过数字相加得到最终的结果,然后再把结果的每一位数字分别填入新的链表中。

但是,想法是好的,现实是残酷的!

题中要求链表长度的范围为0 ~ 10^{6},即如果将它组成一个数字,那得要100万位的数字,显然不现实,只能回归到链表的操作上来。

题目要求时间复杂度为O(n),那只要顺序轮询就可以了。因为是按位加法,还要考虑到进位。类似如下的方式:

所以,首先想到的就是将链表翻转,然后从头计算。

代码:

struct ListNode* ReverseList(struct ListNode* pHead );
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {if (head1 == NULL) {  //确定链表是否有效return head2;}if (head2 == NULL) {return head1;}head1 = ReverseList(head1); //翻转链表head2 = ReverseList(head2);struct ListNode* nHead = (struct ListNode*)malloc(sizeof(struct ListNode)); //申请一个新的节点,很有用struct ListNode* p = nHead;int vForward = 0;while (head1 != NULL && head2 != NULL) { //位数对齐,先计算p->next = head1;p = p->next;p->val = vForward + head1->val + head2->val;if (p->val >= 10) {p->val -= 10;vForward = 1;} else {vForward = 0;}head1 = head1->next;head2 = head2->next;}p->next = (head1 == NULL) ? head2 : head1; //多出来的部分需要单独处理while (p->next != NULL) {p = p->next;p->val = vForward + p->val;if (p->val >= 10) {p->val -= 10;vForward = 1;} else {vForward = 0;}}if (vForward) {  //可能还有进位,最开始malloc的节点就用上了p->next = nHead;nHead = nHead->next;p = p->next;p->val = 1;p->next = NULL;} else {p = nHead;nHead = nHead->next;free(p);}nHead = ReverseList(nHead); //计算完成,再来一次翻转return nHead;
}struct ListNode* ReverseList(struct ListNode* pHead ) {struct ListNode* result = NULL;for (struct ListNode* p = pHead; pHead != NULL; p = pHead) {pHead = p->next;p->next = result;result = p;}return result;
}

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

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

相关文章

智慧矿山成行业新趋势,千寻位置助力企业数字化转型

随着政策推动和科技发展,智慧矿山已成为矿业行业的趋势和未来的方向。 智慧矿山就是以矿山数字化、信息化为前提和基础,对矿山生产、人员健康与安全、技术支持与后勤保障等进行主动感知、自动分析、快速处理,最终实现安全矿山、无人矿山、高效…

3ds Max - Pivot Painter Tool

很久之前的笔记,整理归档; Pivot Painter Tool是3dsMax中的插件,主要是辅助将Mesh中每个Element生成自己的Pivot Position,方便如使用World Position Offset对每个Element进行精确控制,导入使用Pivot Painter Tool工具…

java读取文件内容

直接上代码,两个类:一个工具类,一个测试类 工具类代码: package org.example.study.util;import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils;import java.io.*; import java.nio.charset.Charset…

企业转型在搭建BI时,需要注意什么

如今,商业智能BI在全世界范围内掀起了一股热潮,形成了一个庞大的市场,在信息化时代,企业需要借助BI来进行更好的成长。 在这种全新的社会、商业BI环境下,各行各业的企业都开始寻求探索新的商业模式,通过转…

python + pytest 接口自动化 —— 参数关联

什么是参数关联? 参数关联,也叫接口关联,即接口之间存在参数的联系或依赖。在完成某一功能业务时,有时需要按顺序请求多个接口,此时在某些接口之间可能会存在关联关系。 比如:B接口的某个或某些请求参数是…

Spring Security--会话管理

就像登录qq一样,一个手机登录会将另外一个手机挤下线,这个就叫会话管理。 这个东西非常简单,在默认情况下可以登录n多次,一旦开启,就不允许登录多个。 什么是一个会话。 我们简单理解就是一个浏览器的同一个用户算一…

0基础转行,网路工程和网络安全哪个更有发展前景?

对于初学者而言,初入IT行业最重要的就是选择一个热门且前景好的职业,而网络工程和网络安全作为IT行业的热门职业必然成为很多人的首选,那么网络工程和网络安全哪个发展前景好?小编带大家详细了解一下。 首先,我们对网络工程和网络…

聊一聊近期测试行情以及个人的感受

众所周知,去年年底的裁员潮再加上今年的疫情影响,失业、找工作成为了蛮多人的当务之急。最近一些招聘网站也出现被刷爆的情况,其中顺利找到工作的并不多,说明行情很冷,但是总有许多人顺利跳槽。 其实对于大牛来说&…

工具篇--4 消息中间件-RabbitMq 模型介绍

1 介绍: RabbitMQ 是一个开源的消息中间件,它实现了 AMQP(高级消息队列协议)标准,并且支持多种语言和操作系统,包括 Java、Python、Ruby、PHP、.NET、MacOS、Windows、Linux 等等。RabbitMQ 提供了可靠的消息传递机制…

号称 Java 面试八股文天花板(2023 最新版)首次开源

咱们先来说说: 最近感慨面试难的人越来越多了,一方面是市场环境,更重要的一方面是企业对 Java 的人才要求越来越高了。 基本上这样感慨的分为两类人,第一,虽然挂着 3、5 年经验,但肚子里货少,也…

Element常用组件之 表单组件 form

1. 建立form.vue <template><el-form ref"form" :model"form" label-width"80px"><el-form-item label"活动名称"><el-input v-model"form.name"></el-input></el-form-item><el-f…

怎样高效率备考PMP

一方面由于这些考试的知识&#xff0c;在准备考试前我们大部分很少接触&#xff0c;大部分人考试的目的也未必是感兴趣&#xff0c;更多是因为考试结果能给我们带来的收益。因此长时间的学习不熟悉甚至不感兴趣的很容易疲倦&#xff0c;这不像我们工作或生活中的一些技能&#…

Springboot Apollo配置yml

1.背景&#xff1a; 项目都是配置的Apollo配置中心来进行配置的。新功能需要yml格式的数据&#xff08;层级结构更清晰&#xff09; 2.问题&#xff1a; 1&#xff09;Apollo是否支持yml格式的配置信息&#xff1f; 2&#xff09;配置好了以后读取不到Apollo配置的yml。 3…

从美颜算法到AI美颜SDK:美丽的背后隐藏着什么?

在年轻人的生活中&#xff0c;通过美颜SDK类型的美颜工具进行拍摄已经成为了一种全新的文化现象。时下&#xff0c;AI美颜、美颜SDK讨论热点极高&#xff0c;那么大家知道美颜算法和AI美颜到底有什么不同吗&#xff1f;它们背后隐藏着什么样的技术和思想&#xff1f; 一、美颜算…

Visual Studio Code Arduino资源占用和效率对比

Visual Studio Code&Arduino资源占用和效率对比 系统资源占用&#xff1a;编译效率&#xff1a; 这段时间在玩ESP32&#xff0c;闲来无事对比了一下Visual Studio Code后面简称VS和Arduino的效率和资源占用&#xff0c;只是大致的对比&#xff0c;没有斤斤计较。 配置为&am…

防雷抗浪涌插排插座推荐,同为科技(TOWE)防雷桌面PDU安全可靠

同为科技TOWE双排防雷抗浪涌桌面PDU插座 随着夏天天气越来越热&#xff0c;强对流天气增多&#xff0c;雷雨天气频发。在雷电季节&#xff0c;通常影响家用电器安全的主要原因是由于雷电感应的侵入&#xff0c;特别是对绝缘强度低、过电压耐受力差的微电子产品影响甚大。而所谓…

【spring源码系列-05】refresh中prepareRefresh方法的执行流程

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【二】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428【三】xml配置文件启动spring时refres…

Golang | Web开发之Gin多服务配置及优雅关闭平滑重启

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

计算机组成原理 | 深入理解ELF格式和静态链接

深入解析C语言代码到机器码的过程 #mermaid-svg-UhCa4aLgwtwtM4hS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UhCa4aLgwtwtM4hS .error-icon{fill:#552222;}#mermaid-svg-UhCa4aLgwtwtM4hS .error-text{fill:#5…

阿里云服务器ESSD PL-0云盘与ESSD PL-1云盘区别及选择参考

在我们选购阿里云服务器的时候&#xff0c;通常系统盘与数据盘类型都是ESSD云盘&#xff0c;而云盘的性能又分为PL-0和PL-1&#xff0c;虽然都属于ESSD云盘&#xff0c;但是它们之间的性能是有区别的&#xff0c;收费标准也不一样&#xff0c;本文为大家介绍一下阿里云服务器ES…