LeetCode-Hot100-两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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
题目数据保证列表表示的数字不含前导零
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
这题考的不难,但是对于没怎么写过链表的就有点无从下手了, 学过链表的都知道,链表是一个节点通过指针指向下一个节点的,做到随机存储,顺序读取。(因为链表是不同地址的数通过指针联系起来的,链表读取得通过指针顺序地一个个找到你想要的节点读取)
而本题是一个简单的两链表相加结果数据存储在一个新的链表。这个题在数据结构学链表的时候老师就举过两个,一个是两链表相加结果存储在其中一个链表,一个就是本题。不过本题要求加一个进位的机制,因为每一个节点的数可能 > 10。
纰漏:是怎么去返回一个新的链表,因为在给新链表的赋值的时候索引会一直往后跑的,最后写完了,索引也跑到最后一个节点里了,这不能返回整个链表。
解决方法:链表一般都会有一个头结点,这个节点一般不存储数值,起到一个标记链表起始的作用。
这里再加深记忆一下在c++里建立快速一个链表的代码
struct ListNode {int val; // 链表的数据域ListNode *next; // 指向下一个节点的指针,类型必须是节点的类型,因为指向的就是下一个节点。// 链表的构造方法ListNode() : val(0), next(nullptr) {} // 初始化新节点的方法ListNode(int x) : val(x), next(nullptr) {} // 节点数据域赋值的方法ListNode(int x, ListNode *next) : val(x), next(next) {} // 节点数据域赋值并指定下一个节点的方法};
这题虽然写的时间挺长,但是提交第二次就过了,成绩也不错超过了99%的
class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* index1 = l1; // 链表l1的索引节点1,用来遍历链表ListNode* index2 = l2; // 链表l2的索引节点2ListNode* head = new ListNode(); // 创建头结点,不存储数据,用来标记链表开头节点ListNode* index3 = head; // 新链表的索引节点3head -> next = index3; // 让索引3指向头结点的下一个节点,也就是正式开始存储数据的节点int upcode = 0,mid = 0; // 设置进位数默认为0,和中间数暂存每个节点相加的数据while(index1 != nullptr || index2 != nullptr) { // 如果链表1或者链表2没遍历完的话加上每个节点的数值if (index1 == nullptr) { // 如果链表1遍历完了,但是链表2没遍历完,仍要加上链表2的数据并且继续遍历链表2mid = (index2 -> val) + upcode; //这里的mid要加上每次进位的数index2 = index2 -> next; //index2向后移} else if (index2 == nullptr) { // 逻辑同上mid = (index1 -> val) + upcode;index1 = index1 -> next;} else { // 其他情况就是(index1 != nullptr && index2 != nullptr)mid = (index1 -> val) + (index2 -> val) + upcode;index1 = index1 -> next;index2 = index2 -> next;}if( mid >= 10 ) { // 如果每一次相加的结果大于10,我们取一下要进位的数和个位数upcode = mid / 10;mid = mid % 10;} else { // 否则就重置一下进位数为0 upcode = 0;}index3 -> next = new ListNode(mid); // 存一下结果的个位数index3 = index3 -> next; // index3向后移一位}if (upcode != 0 ) index3 -> next = new ListNode(upcode); // 这里要注意最后一次循环结束后还有一个进位数没处理,要判断一下此进位数是否为0,不为零再给他新建一个节点,index3不要移动了,因为已经到了最后一个节点了。return head -> next; // 利用不存数的头结点来返回整条链表}
};
LeetCode-Hot100-两数相加相关推荐
- [链表遍历|模拟] leetcode 2 两数相加
[链表遍历|模拟] leetcode 2 两数相加 1.题目 题目链接 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果 ...
- 20200114:(leetcode)两数相加
两数相加 题目 主要思路 代码实现 题目 注意点:不以0开头 主要思路 逐个相加即可,注意需要逆序加,注意进位即可: 由于数字是个位数的,因此进位只有可能是0或者1: 注意定义的有参构造器. 代码实现 ...
- LeetCode 445. 两数相加 II(链表大数加法)
1. 题目 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进 ...
- LeetCode 2 两数相加
给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 - ...
- LeetCode 2 两数相加(链表)
题目要求: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入 ...
- LeetCode:2. 两数相加(中等)
2. 两数相加(中等) 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 把俩个链表对应位相加,如果大于等于10,对10取余,小于10,直接得到这一位 解题过程存在这样几个问题: 1.进行循环 ...
- leetcode算法—两数相加 Add Two Numbers
关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...
- leetcode —— 2. 两数相加 (对于链表更新的细节)
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- leetcode 2. 两数相加
难度:中等 频次:72 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. ...
- 力扣(Leetcode)-2. 两数相加
描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 ...
最新文章
- 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)
- linux apache cpu,linux – Apache使用100%的CPU. “ps”命令可以告诉我它在做什么吗?...
- 【leetcode】944. Delete Columns to Make Sorted
- SanFeng-Clound
- Kettle转换作业50个案例代码
- Git本地与远程配对命令:两种 一种是在推送push时候配对 一种是新建分支checkout -b时候配对
- 【C++】Visual Studio教程(七) -修改 Visual Studio
- Windows Server 2016-图形化迁移FSMO角色
- hive高级数据类型
- vscode css智能补全_让你编码嗨到停不下来的8个VSCode插件
- 如何快速离职?离职交接工作清单(前端)
- 玩转 ESP32 + Arduino (十九) SIM800L调试(基于TTGO T-CALL)
- 计算机考研用python_20年苏州大学计算机考研经验
- 回归分析(数据拟合---MATLAB和1stopt软件)
- There are 1 missing blocks. The following files may be corrupted:
- 图片png怎么转成pdf格式?
- CYK 算法 Python 实现
- Java字符串:getBytes() 方法
- 大型客服外包公司和小型客服外包公司的不同
- 想报考pmp(pmp报考费),一定要先经过培训机构吗?