**

力扣 两数相加 C语言 题解

**

文章目录

  • 力扣 两数相加 C语言 题解
  • 一、完整题目
  • 二、解题思路
  • 二、编写代码
  • 四、测评结果
  • 五、总结评价

一、完整题目

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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 和 l2 链表都为空的时候才结束,每次循环分配一个结点空间。
  • 设置进位标志 flag,和求和项 sum,有进位 flag = 1否则为 0;sum为两个链表当前结点的值的和加上标志位的值。
  • 分两种情况:1.两个链表都没加完,此时,每次从两个链表中取出一项相加,判断是否进位,有进位就只加个位,否则直接加。2.两个链表有一个加完了,所以只需要每次将 sum 的值改为,一个链表的值加上标志位即可,其他与第一种情况一致。
  • 循环结束后,还要进行一次判断,是否退出循环时,有未加的标志位,如果有,就加上即可。
  • 最后,将求和链表重新从头节点开始,并返回此链表。

二、编写代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){//定义:和的链表struct ListNode* lSum;//定义:头节点struct ListNode* head;//定义:中间变量struct ListNode* tmp;//定义:进位标志(初始化置0),和int flag=0,sum;//分配空间lSum = (struct ListNode*) malloc(sizeof(struct ListNode));//初始化lSum->next = NULL;//保存头节点head = lSum;//求和while (l1 || l2){//分配空间tmp = (struct ListNode*) malloc(sizeof(struct ListNode));//初始化tmp->next = NULL;//将和指向下一位    lSum->next = tmp;lSum = lSum->next;//进位求和if(l1 && l2) {sum = l1->val + l2->val + flag;if(sum > 9){sum %= 10;flag = 1;}else flag = 0;lSum->val = sum;}if(l1 && !l2){sum = l1->val + flag;if(sum > 9){sum %= 10;flag = 1;}else flag = 0;lSum->val = sum;}if(!l1 && l2){sum = l2->val + flag;if(sum > 9){sum %= 10;flag = 1;}else flag = 0;lSum->val = sum;}//l1,l2分别指向下一位if (l1) l1 = l1->next;if (l2) l2 = l2->next;}//如果还存在进位if (flag){//分配空间tmp = (struct ListNode*) malloc(sizeof(struct ListNode));//初始化tmp->next = NULL;//将和指向下一位    lSum->next = tmp;lSum = lSum->next;//赋值lSum->val = flag;}//重新指向头节点lSum = head->next;return lSum;
}

四、测评结果


我写的方法只能说可以完成题目,还有很大的提升空间,可以好好精进。

五、总结评价

此题不是很有难度,主要考察对单向链表的掌握程度,掌握的熟练的话,此题很快就完成了,不然会在编写代码的过程中,总是有各种小错误。所以,一定好好看数据结构,将基本的数据类型都掌握。

有问题欢迎各位大佬指出
力扣系列将持续更新,欢迎关注,一起学习

力扣 两数相加 C语言 题解相关推荐

  1. 力扣 两数相加 指针操作注意事项

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  2. 力扣-两数之和 (梦开始的地方)

    力扣-两数之和(梦开始的地方) 来源:力扣网 https://leetcode.cn/problems/two-sum/ 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组 ...

  3. C++力扣2--两数相加(思路及代码)

    1.题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...

  4. 两数相加—C语言逐位相加版(注释详尽)

    本题为leetcode上的一道中等难度题,源代码由一名叫做秀艺的用户所写,相比我自己的版本简洁很多,应用了很多小技巧,值得借鉴学习,在整理过程中为了更好的理清思路,为每一行代码进行了注释(这样做效果也 ...

  5. 力扣两数之和 II - 输入有序数组

    题目:给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target . 我的代码: 对撞指针 class Solution {public ...

  6. 力扣刷题-单链表两数相加

    分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...

  7. 两数相加【力扣:中等难度】

    title: 两数相加[力扣:中等难度] tags: LeetCode 题目 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. ...

  8. 力扣每日一题——两数相加II

    发现做的题难度始终不高,今天Leecode给了一个稍微难一点的题目.(前两天没更是因为去拔牙了~~>_<~~) 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每 ...

  9. 双指针解决力扣两/三数之和问题

    双指针解决力扣两/三数之和问题 文章目录 双指针解决力扣两/三数之和问题 一.问题描述 二.分析 1.暴力 2.排序+双指针法 3.hash法 三.问题描述 四.分析 方法一:排序 + 双指针 五.代 ...

最新文章

  1. Thrift的接口定义语言IDL
  2. 转再次写给我们这些浮躁的程序员
  3. [省选联考 2020 A/B 卷] 信号传递(状压dp + 卡空间)
  4. USACO Section2.2 Preface Numbering 解题报告 【icedream61】
  5. Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图
  6. 论文阅读汇总(4)-【篇数:50】
  7. 复旦MBA第二学位:畅享顶尖国际商科资源,探索全球发展新可能
  8. Zynq-7000 - Which IBIS models should be used for Zynq-7000 devices?
  9. Showslow+Yslow+DynaTrace前端性能自动化执行机使用手册
  10. 中国移动光猫的拨号和桥接模式的区别
  11. 一文入门大规模预训练语言模型丨“悟道之巅”公开课实录(1)
  12. 领域研究 | IL-1B与先天免疫
  13. Shell 编程入门(一)
  14. html5 桌面时钟,超级实用的html5制作15种数字时钟样式代码
  15. 电子产品可靠性测试标准
  16. android 10.0 监听Soft Ap热点连接与断开
  17. Java解析eml邮件格式文件
  18. excel中的FV函数、PMT函数与PV函数的java实现
  19. Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
  20. android auto 定位不准,驱使用户远离Android Auto的原因是“不一致”

热门文章

  1. 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
  2. 【APICloud系列|15】上架ios应用到苹果应用市场总结
  3. (轉貼) LCD入門常識
  4. 接口调用成功,功能实现但是返回404报错
  5. python开发小程序拼团_拼团商城模式开发(如何开发)
  6. Visual Odometry Revisited: What Should Be Learnt?(2020.2)
  7. bat备份MySQL失败_bat备份mysql的方法
  8. 传说对决服务器无响应怎么办,传说对决一直进不去怎么办
  9. 二十三种设计模式 python实现
  10. 腾讯2019技术岗笔试 小Q非常喜欢复读,有时候,小Q会得到某个字符串S。这时他会把s不断重复不断重复连成一个无限长的串。比如说,小Q现在得到一个串abc,他会直一复读, 那么形成的字符串就是: