1. 两数相加
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

链表数学运算的问题:写递归函数要考虑好两个问题:
1/什么时候是递归边界
2/如何防止运算过程中的访问越界问题
3/防止递归到下一层时越界

对于本问题1:当递归进行加操作时,走到了两个都是NULL的时候返回,1个不是NULL时说明还有数据,还要进行加操作的处理。递归边界一定要注意是真的递归边界,不会导致错误的递归边界。这里也就是判断没有加操作的强约束:就是两个表都是空表的时候。

对于问题2:当进行任何访问指针指向的内容比如r->val或是r->next 都要注意提前判断当前节点r是否为NULL

问题3见代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {if(l1==NULL&&l2==NULL)return l1;//边界强约束判定:防止两个0的结果 若是两个指针都已经指空了说明来到了指针尽头 返回int v1,v2;if(l1==NULL)v1 = 0;else v1 = l1->val;if(l2==NULL)v2 = 0;else v2 = l2->val;int sum = v1+v2;//+操作执行if(l1!=NULL)//判空l1->val = sum%10;else l1 = new ListNode(sum%10);if(sum>9){if(l1->next==NULL)l1->next = new ListNode(1);else l1->next->val+=1;}//递归防止越界递归ListNode *p1=l1,*p2=l2;if(p2==NULL)l1->next = addTwoNumbers(p1->next,p2);//如果p2空了说明2链表长度短 那么没必要传p2->next,因为此时p2本身就是空的else l1->next = addTwoNumbers(p1->next,p2->next);//p2不空 return l1;}
};

力扣 两数相加 指针操作注意事项相关推荐

  1. 力扣 两数相加 C语言 题解

    ** 力扣 两数相加 C语言 题解 ** 文章目录 力扣 两数相加 C语言 题解 一.完整题目 二.解题思路 二.编写代码 四.测评结果 五.总结评价 一.完整题目 给你两个非空的链表,表示两个非负的 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 2. 两数相加(中等)

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

最新文章

  1. okhttp面试: Socket
  2. python gui选择_Python之GUI的最终选择(Tkinter)
  3. Java线程池使用与原理
  4. 如何理解python的类与对象
  5. 运行JBoss 5.1.0 GA时出现Error installing to Instantiated:name=AttachmentStore state=Described错误的解决办法...
  6. 指针的引用做函数的参数
  7. 5新建没有头文件_IAR新建工程
  8. SAP Commerce Cloud SmartEdit 学习笔记
  9. JS实现生成一个周对应日期数组
  10. 实施工程师1分钟即时演讲_我是如何在1年内从时装模特转变为软件工程师的
  11. mysql增数据语句_Mysql 数据增删改查语句
  12. android 修改系统参数设置,2021-05-15 [RK3399][Android7.1] 调试笔记 ---显示参数动态设置接口...
  13. VSCode Python解决 No module named 问题
  14. OpenGL编程指南 示例笔记(2)--独立地移动光源
  15. 大数据BI平台建设需注意什么问题
  16. 千万千万不可运行的Linux命令
  17. 计算机应用基础2011,2011统计师计算机应用基础:计算机概述
  18. Shiro实现logout操作
  19. 视频关键帧抽取终结篇——关键帧是什么?
  20. python3中的rank函数

热门文章

  1. 搭建hexo博客并部署到github上
  2. 《学习OpenCV》课后习题解答1
  3. 为PHP7安装Windows Server 2012 R2过程记录
  4. Java学习笔记_身份验证机制
  5. Java2实用教程(第二版)程序代码——第十四章 Component类的常用方法
  6. matlab中腐蚀图像的编写,Matlab实现二值图像的腐蚀算法源代码
  7. 初一辍学学php能行吗_《夺冠》破7亿,辍学的农村姑娘成排球女王,朱婷:百炼才能成钢...
  8. Java 面试题(3)—— JVM
  9. 常见Eclipse SVN插件报错解决方法
  10. Eclipse Java EE 开发 Web 应用程序