【LeetCode训练营02】两个非空链表相加 详解

news2025/1/13 10:16:37

目录

题目 

解题思路的分享

解题源码的分享

 

题目 

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

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

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

解题思路的分享

  • 题目的要求是对两个链表求和,并且返回作为结果的链表。
  • 我第一时间想到的是对l1进行运算并且返回它,但是这个想法很快就被我推翻了。
  • 如果使用l1作为运算对象,那么当逢十进一时l1下一个结点的值就会被修改,这样肯定是不行的。
  • 所以我们单独定义出一个单链表,对这个单链表进行运算。
  • 单链表就要有头指针和尾指针。
  • 我们还要定义一个sum来存放本位的运算结果,再来一个cf来存放进位的运算结果。
  • 对sum的运算要分三种情况,平常情况(l1和l2都未走到空结点的时候),l1走到空结点时,l2走到空结点时。
  • 要想将每一位的运算结果存起来,就要开辟新的结点。
  • sum%10就是这个结点的值,cf/10是进位的值,要保存下来用于下一次运算。
  • 结点的插入类似于单链表的尾插,也是分两种情况,在这里就不多说了。
  • 最后还有一种情况是l1和l2都已经走到空结点,但是cf还不为零,这是就要创建一个新的结点来存放这个值并作为尾结点。

解题源码的分享

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

 这个方法可能有些复杂和冗余,有哪里可以改进的地方还请大佬们不吝赐教。

 

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

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

相关文章

Executor框架简介

Executor系统中&#xff0c;将线程任务提交和任务执行进行了解耦的设计; 线程被一对一映射为服务所在操作系统线程&#xff0c;启动时会创建一个操作系统线程&#xff1b;当该线程终止时&#xff0c;这个操作系统线程也会被回收 Executor框架包含的核心接口和主要的实现类 具体…

Linux下安装Hive

文章目录 1. 确保linux环境下mysql已安装2. 上传安装包3. 解压安装包4. 修改目录名称5. 配置环境变量6. 解压日志jar包冲突7. 拷贝mysql驱动jar包8. 配置hive的参数文件9. 增加hadoop的配置参数10.在mysql中进行相关配置11. 初始化hive的元数据库 1. 确保linux环境下mysql已安装…

【Android】之【WebView】

一、简介 WebView是一种控件&#xff0c;它基于webkit引擎&#xff0c;因此具备渲染Web页面的功能。   基于Webview的混合开发&#xff0c;就是在 Android os(安卓)/I os(苹果)原生APP里&#xff0c;通过WebView控件嵌入Web页面。 你手机里有淘宝软件吧&#xff1f; 就是外…

uniapp开发微信小程序分包处理实录

uniapp开发微信小程序上传代码时可能会遇到项目过大问题&#xff0c;今天就结合自己的实际操作简单记录下如何处理项目代码超出限制问题。 常用的操作就是将项目中的图片访问由本地访问修改为网络访问&#xff0c;微信开发者工具上传代码时勾选相关的压缩文件选项等&am…

CV开启大模型时代!谷歌发布史上最大ViT:220亿参数,视觉感知力直逼人类

ViT模型何时才能破万亿&#xff1f; Transformer无疑是促进自然语言处理领域繁荣的最大功臣&#xff0c;也是GPT-4等大规模语言模型的基础架构。 不过相比语言模型动辄成千上万亿的参数量&#xff0c;计算机视觉领域吃到Transformer的红利就没那么多了&#xff0c;目前最大的…

《华为机试》——MP3光标位置 及 洗牌

本期&#xff0c;我给大家带来以下两个题目的讲解&#xff1a; 1、《华为机试》——MP3光标位置 &#xff08;中等&#xff09;2、 2017年校招真题——洗牌 &#xff08;简单&#xff09; 以上两个题的难度属于我也给大家标注出来了&#xff0c;接下来&#xff0c;我们一起去…

利用chatgpt处理Excel数据

一 前言 以前用chatgpt主要做问答&#xff0c;这次加入星球学习到了如何用chatgpt处理Excel&#xff0c;虽然现在处理起来还不是很方便&#xff0c;用熟悉了&#xff08;主要是熟悉提示词&#xff09;&#xff0c;处理起来会越来越快的。 二 准备工作 一个可用的chatgpt账号&…

针对jar和vue的一键自动化部署工具,界面友好操作简单

easy-jenkins是一款对vue和jar的部署工具&#xff0c;操作简单&#xff0c;实行一键部署&#xff0c;内部结构采用流水线形式架构&#xff0c;每次部署&#xff0c;时时提供部署过程&#xff0c;部署记录&#xff0c;界面友好简洁&#xff0c;使用方便&#xff0c;符合用户常规…

HTML学习(5)Canvas绘图

文章目录 HTML5 CanvasHTML5 内联SVG HTML5 Canvas 使用 Canvas 进行绘图工作&#xff0c;Canvas元素用于在网页上绘制图片。 创建一个Canvas的元素&#xff1a; <canvas id"myCanvas" width"200" height"100"></canvas>但是Canv…

设计模式 -- 装饰模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

操作系统原理 —— 什么是中断?(四)

我们先来看看早期的计算机的工作流程&#xff1a; 如上图&#xff0c;在早期的计算机假设有三个程序需要执行&#xff0c;执行顺序是&#xff1a;先执行程序1&#xff0c;等待程序1结束之后&#xff0c;再开始执行程序2&#xff0c;以此类推&#xff0c;所以它们是串行执行的…

使用ChatGPT编写Python接口的指南

使用ChatGPT编写Python接口的指南 ChatGPT是一种自然语言处理技术&#xff0c;可以用于各种文本生成任务。在本文中&#xff0c;我们将介绍如何使用Python编写ChatGPT的接口&#xff0c;并提供一些有用的技巧和示例代码。 步骤一&#xff1a;安装所需的库 在编写ChatGPT接口…

数据仓库的概念及与数据库等对比

1、什么是数据仓库&#xff1f; 数据仓库是信息&#xff08;对其进行分析可做出更明智的决策&#xff09;的中央存储库。通常&#xff0c;数据定期从事务系统、关系数据库和其他来源流入数据仓库。业务分析师、数据工程师、数据科学家和决策者通过商业智能 (BI) 工具、SQL 客户…

SOLIDWORKS机械设计如何控制尺寸?

机械设计过程中的尺寸把握&#xff0c;实际就是一个人的设计能力的体现&#xff0c;如果你不具备相应的设计能力&#xff0c;那所谓的尺寸把握是做不好的。所以今天在这里分享一套基本的设计流程和方法给大家&#xff0c;只有切实可行的方法才能打通你走向完善的专业技能之路。…

测试老鸟总结,性能测试如何做?常见异常有哪些?解决方法...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 常见的性能异常 …

1.Introduction: Hands-on Graph Neural Networks

PyG&#xff08;PyTorch Geometric&#xff09;是一个基于PyTorch的库&#xff0c;用于轻松编写和训练图形神经网络&#xff08;GNN&#xff09;&#xff0c;用于与结构化数据相关的广泛应用。博客好久没有更新了&#xff0c;恰逢1024创作纪念日&#xff0c;浅浅更新一下吧。 这…

logging模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 logging模块 日志级别修改logging模块默认行为logger对象 专栏&#xff1a;《python从入门到实战》 日…

MACH SYSTEMS网关:SAE J2716(SENT) 转 RS-232/CAN

双通道SAE J2716&#xff08;SENT&#xff09;至RS-232/CAN总线网关&#xff0c;具有两个双向SENT通道和RS-232&#xff08;SENT-RS232&#xff09;或CAN总线&#xff08;SENT-CAN&#xff09;接口。两种变体还提供两个模拟输出&#xff0c;可以直接将输入SENT数据转换为模拟电…

VMware SD-WAN 5.1 - 软件定义的 WAN

请访问原文链接&#xff1a;https://sysin.org/blog/vmware-sd-wan-5/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 产品概述 软件定义的 WAN (SD-WAN) SD-WAN 的功能特性 简化的 SD-WAN 了解软件定义的 WAN (SD-WAN) 的概…

Java后台POST请求以application/x-www-form-urlencoded;charset=utf-8格式以及raw的JSON的请求方式

一、Java后台POST请求以application/x-www-form-urlencoded; 1、引入依赖&#xff1a; <dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version> </dependency&g…