力扣 两数相加 C语言 题解
**
力扣 两数相加 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语言 题解相关推荐
- 力扣 两数相加 指针操作注意事项
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 力扣-两数之和 (梦开始的地方)
力扣-两数之和(梦开始的地方) 来源:力扣网 https://leetcode.cn/problems/two-sum/ 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组 ...
- C++力扣2--两数相加(思路及代码)
1.题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...
- 两数相加—C语言逐位相加版(注释详尽)
本题为leetcode上的一道中等难度题,源代码由一名叫做秀艺的用户所写,相比我自己的版本简洁很多,应用了很多小技巧,值得借鉴学习,在整理过程中为了更好的理清思路,为每一行代码进行了注释(这样做效果也 ...
- 力扣两数之和 II - 输入有序数组
题目:给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target . 我的代码: 对撞指针 class Solution {public ...
- 力扣刷题-单链表两数相加
分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...
- 两数相加【力扣:中等难度】
title: 两数相加[力扣:中等难度] tags: LeetCode 题目 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. ...
- 力扣每日一题——两数相加II
发现做的题难度始终不高,今天Leecode给了一个稍微难一点的题目.(前两天没更是因为去拔牙了~~>_<~~) 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每 ...
- 双指针解决力扣两/三数之和问题
双指针解决力扣两/三数之和问题 文章目录 双指针解决力扣两/三数之和问题 一.问题描述 二.分析 1.暴力 2.排序+双指针法 3.hash法 三.问题描述 四.分析 方法一:排序 + 双指针 五.代 ...
最新文章
- Thrift的接口定义语言IDL
- 转再次写给我们这些浮躁的程序员
- [省选联考 2020 A/B 卷] 信号传递(状压dp + 卡空间)
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
- Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图
- 论文阅读汇总(4)-【篇数:50】
- 复旦MBA第二学位:畅享顶尖国际商科资源,探索全球发展新可能
- Zynq-7000 - Which IBIS models should be used for Zynq-7000 devices?
- Showslow+Yslow+DynaTrace前端性能自动化执行机使用手册
- 中国移动光猫的拨号和桥接模式的区别
- 一文入门大规模预训练语言模型丨“悟道之巅”公开课实录(1)
- 领域研究 | IL-1B与先天免疫
- Shell 编程入门(一)
- html5 桌面时钟,超级实用的html5制作15种数字时钟样式代码
- 电子产品可靠性测试标准
- android 10.0 监听Soft Ap热点连接与断开
- Java解析eml邮件格式文件
- excel中的FV函数、PMT函数与PV函数的java实现
- Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
- android auto 定位不准,驱使用户远离Android Auto的原因是“不一致”
热门文章
- 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
- 【APICloud系列|15】上架ios应用到苹果应用市场总结
- (轉貼) LCD入門常識
- 接口调用成功,功能实现但是返回404报错
- python开发小程序拼团_拼团商城模式开发(如何开发)
- Visual Odometry Revisited: What Should Be Learnt?(2020.2)
- bat备份MySQL失败_bat备份mysql的方法
- 传说对决服务器无响应怎么办,传说对决一直进不去怎么办
- 二十三种设计模式 python实现
- 腾讯2019技术岗笔试 小Q非常喜欢复读,有时候,小Q会得到某个字符串S。这时他会把s不断重复不断重复连成一个无限长的串。比如说,小Q现在得到一个串abc,他会直一复读, 那么形成的字符串就是: