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

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

你可以假设除了数字 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-两数相加相关推荐

  1. [链表遍历|模拟] leetcode 2 两数相加

    [链表遍历|模拟] leetcode 2 两数相加 1.题目 题目链接 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果 ...

  2. 20200114:(leetcode)两数相加

    两数相加 题目 主要思路 代码实现 题目 注意点:不以0开头 主要思路 逐个相加即可,注意需要逆序加,注意进位即可: 由于数字是个位数的,因此进位只有可能是0或者1: 注意定义的有参构造器. 代码实现 ...

  3. LeetCode 445. 两数相加 II(链表大数加法)

    1. 题目 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进 ...

  4. LeetCode 2 两数相加

    给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 - ...

  5. LeetCode 2 两数相加(链表)

    题目要求: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入 ...

  6. LeetCode:2. 两数相加(中等)

    2. 两数相加(中等) 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 把俩个链表对应位相加,如果大于等于10,对10取余,小于10,直接得到这一位 解题过程存在这样几个问题: 1.进行循环 ...

  7. leetcode算法—两数相加 Add Two Numbers

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...

  8. leetcode —— 2. 两数相加 (对于链表更新的细节)

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

  9. leetcode 2. 两数相加

    难度:中等 频次:72 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. ...

  10. 力扣(Leetcode)-2. 两数相加

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

最新文章

  1. 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)
  2. linux apache cpu,linux – Apache使用100%的CPU. “ps”命令可以告诉我它在做什么吗?...
  3. 【leetcode】944. Delete Columns to Make Sorted
  4. SanFeng-Clound
  5. Kettle转换作业50个案例代码
  6. Git本地与远程配对命令:两种 一种是在推送push时候配对 一种是新建分支checkout -b时候配对
  7. 【C++】Visual Studio教程(七) -修改 Visual Studio
  8. Windows Server 2016-图形化迁移FSMO角色
  9. hive高级数据类型
  10. vscode css智能补全_让你编码嗨到停不下来的8个VSCode插件
  11. 如何快速离职?离职交接工作清单(前端)
  12. 玩转 ESP32 + Arduino (十九) SIM800L调试(基于TTGO T-CALL)
  13. 计算机考研用python_20年苏州大学计算机考研经验
  14. 回归分析(数据拟合---MATLAB和1stopt软件)
  15. There are 1 missing blocks. The following files may be corrupted:
  16. 图片png怎么转成pdf格式?
  17. CYK 算法 Python 实现
  18. Java字符串:getBytes() 方法
  19. 大型客服外包公司和小型客服外包公司的不同
  20. 想报考pmp(pmp报考费),一定要先经过培训机构吗?

热门文章

  1. 关于win10无法打开.msi文件的解决方法
  2. ActiveMQ实现削峰填谷
  3. 导入Maven项目右下角蓝色小框消失解决办法
  4. Go将中文转换为拼音
  5. 基于强化学习工具箱的自适应巡航控制系统
  6. qsnctf 哥哥打篮球 wp
  7. python代码雨_教你用200行Python代码“换脸”
  8. 2018-8-10-WPF-修改图片颜色
  9. 【AC.HASH】OpenHarmony啃论文俱乐部——哈希技术:综述和分类(译)
  10. webAppRootKey