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

news2024/11/18 18:31:07

力扣网 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;//新链表头结点指针和遍历链表的指针tail
    int carry=0;//进位值,最开始等于0
    while(s1||s2)//遍历两个链表,两个链表同时为空结束
    {
        int n1=s1?s1->val:0;//如果s1不为空取s1对应的值,空则视为0
        int n2=s2?s2->val:0;//如果s2不为空取s2对应的值,空则视为0
        int 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;//移动tail
            tail->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.coloradmin.cn/o/1252773.html

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

相关文章

【Spring篇】Spring注解式开发

本文根据哔哩哔哩课程内容结合自己自学所得,用于自己复习,如有错误欢迎指正; 我在想用一句话激励我自己努力学习,却想不出来什么惊为天人、精妙绝伦的句子,脑子里全是上课老师想说却没想起的四个字 “ 唯手熟尔 ”&am…

python pip安装第三方包时报错 error: Microsoft Visual C++ 14.0 or greater is required.

文章目录 1.问题2.原因3.解决办法 1.问题 pip install 的时候报错一大堆,其中有这么一段话 👇 error: Microsoft Visual C 14.0 or greater is required. Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visua…

java基于springboot公益帮学网站 新闻发布系统的设计与实现vue

以Java为开发平台,综合利用Java Web开发技术、数据库技术等,开发出公益帮学网站。用户使用版块:可以选择注册并登录,可以浏览信息、可以网上互动、发布文章、内容推荐等。后台管理员管理版块:以管理员身份登录网站后台…

Proteus仿真--用DS1302与12864LCD设计的可调式中文电子日历

本文主要介绍用DS1302和12864 LCD的可调式中文电子日历(完整仿真源文件及代码见文末链接) 仿真图如下 其中12864LCD上面显示中文年月日信息时间信息,按键K1-K4,K1用于年月日时分选择,K2用于加功能,K3用于…

isis基础大全学习案例

R1配置: isis 1 is-level level-2 //本区域只启用level-2级别 cost-style wide //默认为narrow窄度量,开销只能最大63,并且不能打tag,wide宽度量的tlv和narrow不匹配,不能相互计算路由,两边都要改。 netwo…

Docker的学习笔记

1.1 docker的介绍 1.2 docker的一次安装 //如果是root用户,不加sudo也行curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -echo deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable…

路由VRRP与BFD联动例子

拓朴如下: 主要配置如下: [S1] vlan batch 10 20 # interface GigabitEthernet0/0/1port link-type accessport default vlan 10 # interface GigabitEthernet0/0/2port link-type accessport default vlan 20 # interface GigabitEthernet0/0/3port li…

[计算机网络]运输层概述

虽然我自己也不知道写在前面和前言有什么区别..... 这个系列其实是针对<深入浅出计算机网络>的简单总结,加入了一点个人的理解和浅薄见识,如果您有一些更好的意见和见解,欢迎随时协助我改正,感激不尽啦. 最近心态平和了不少, 和过去也完全做了个割舍吧,既然痛苦和压力的…

未来已来,Web前端测试这么做更高效!

一. 前端测试是什么&#xff1f; 前端测试也是一种自动化测试技术&#xff0c;其测试的主要对象就是 Web 应用的图形用户界面&#xff08;GUI&#xff09;、功能和可用性&#xff0c;以确保 Web 应用的 GUI 层在连续的更新迭代中没有 Bug。 例如&#xff0c;可以检查输入字段…

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…

值得看的书--《全宋词》节选

(https://img-blog.csdnimg.cn/5d5fe2844f6646b5b7b415f0a9e80f6c.jpg)

java学习part11继承

1.类的继承 继承为了让类之间建立联系&#xff0c;同时复用代码。 子类和父类的同名函数构成重写&#xff0c;能覆盖&#xff0c;除非用super.xx()调。 同名属性不会覆盖&#xff0c;而是并存&#xff0c;用super.xx调。 2.子类初始化 子类会自动调用父类无参构造super() 3.重…

Eclipse安装EvoSuite插件

Eclipse安装EvoSuite插件 EvoSuite自动为Java类生成JUnit测试套件,针对分支覆盖率等代码覆盖率标准。为了提高可读性,生成的单元测试被最小化,并且捕获被测试类的当前行为的回归断言被添加到测试中。 EvoSuite的GitHub地址:https://github.com/EvoSuite/evosuite 📕Ecl…

ctfshow刷题web入门--1--ljcsd

文章目录 ctf.show。信息搜集web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20。爆破。知识1.1 播种随机数生成器-mt_srand。参考web21--重点web22--做不出来web23web24web25web26web27web28。。。命令执行。知识1 绕过正则表达式…

易错知识点(数学一)

一、反常积分判敛 1、构造使其极限等于一个大于0的常数 1&#xff09;前者通过&#xff1a;化等价无穷小 or 泰勒展开 2&#xff09;若存在p>1使得等式成立&#xff0c;则收敛 考察形式&#xff1a;1、已知收敛&#xff0c;求f(x)中的幂次取值范围 主要思想&#xff1a;比较…

Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息

前面的话 默认你已经懂 Docker、docker-compose Nacos版本&#xff1a;v2.2.3 MySQL 版本&#xff1a;8.2.0 一、下载 打开 Nacos 官网 官网地址&#xff1a;官网 点击手册 左侧 Nacos Docker 克隆项目到本地 # 克隆项目&#xff0c;如果提示连接不到 github 请自行解决 …

MapTR 论文研读

MapTR 论文研读 MapTR论文 :https://arxiv.org/pdf/2208.14437.pdf 代码:https://github.com/hustvl/MapTR MapTR(来自地平线) 1.摘要 作者们提出了一种有效构建高清地图的方法(MapTR),该地图为自动驾驶系统的规划提供丰富且精确的环境信息。这是一种结构化端到端变…

[AutoSAR 存储] 汽车智能座舱的存储需求

公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《AutoSAR 存储》 <<<< 返回总目录 <<<< 1 智能座舱的发展&#xff1a; 1.1 发展历史 车辆信息娱乐系统的发展可以分为三个阶段。 机械化阶段 在上世纪90年代&#xff0c;车辆仪表盘…

LeetCode78.子集

这道题如果用暴力法几乎是不可能解出来的&#xff0c;因为情况太复杂了&#xff0c;但是一旦用上递归回溯就会轻松很多&#xff0c;先上代码&#xff1a; class Solution {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integ…

服务器连接github

https://zhuanlan.zhihu.com/p/543490354 比着这个一步步做就行。 https://blog.l0v0.com/posts/94ffdbdf.html 上传文件可以看这个 注意&#xff1a; 密钥ssh-keygen设置好之后&#xff0c;以后就不用每次输入账号密码才能访问了。 otherwise&#xff0c;每次要输入账号密码。…