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

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

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

示例:

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

解法1:

/*** Definition for singly-linked list.* 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) {}* };*/
class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *p,*q;int len1 = 1; //l1的长度int len2 = 1; //l2的长度int flag = 0;int res = 0;p=l1;q=l2;while(p->next!=NULL){len1++ ;p=p->next;}while(q->next!=NULL){len2++;q=q->next;}if(len1>len2){for(int m = 0 ; m<len1-len2;m++){q->next=new ListNode(0);q=q->next;}}else if(len1<len2){for(int n = 0 ; n<len2-len1;n++){p->next=new ListNode(0);p=p->next;}}p=l1;q=l2;ListNode *l3 = new ListNode(-1);ListNode *w = l3;while(p!=NULL&&q!=NULL){res = flag+p->val + q->val;w->next = new ListNode(res%10);flag = res>=10?1:0;w=w->next;p=p->next;q=q->next;}if(flag){w->next = new ListNode(1);w=w->next;}return l3->next;}
};

我自己没想到的这道题的两个关键:

  1. 进位最多为1,可以通过是否大于10直接判断进位
  2. 这个是逆序存储,所以进位的值直接累加到下一个(next)指针的值即可

一些值得注意的code piece

        while(p!=NULL&&q!=NULL){res = flag+p->val + q->val; flag = res>=10?1:0; //flag值可以由循环后面的值来决定 可以看到这里的flag直接影响的是下一次循环的下一个res值//比较常见的trick是先给flag赋值为0,后续会改变flag因而改变结果w=w->next;p=p->next;q=q->next;}

leetcode2 两数相加相关推荐

  1. LeetCode2.两数相加

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

  2. [Swift]LeetCode2. 两数相加 | Add Two Numbers

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. Leetcode-2 两数相加【c语言】

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

  4. leetcode-2 两数相加

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

  5. leetcode2. 两数相加--每天刷一道leetcode系列!

    来自:程序员面试 作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节 ...

  6. 简单算法题:leetcode-2 两数相加

    算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...

  7. Leetcode--2. 两数相加

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

  8. LeetCode2. 两数相加

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

  9. leetCode刷题 2. 两数相加

    原题链接: leetcode-cn.com/problems/ad- 题目描述 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你 ...

最新文章

  1. ThreadGroup分析
  2. 如何将frm文件导入MySql数据库
  3. SpringBoot笔记:SpringBoot2.3读取应用配置参数的几种方式
  4. java远程监控服务器配置_JAVA VirtualVM远程监控配置
  5. 计算机网络选择重传,计算机网络选择重传协议实验报告..docx
  6. 把iconfront的资源放cdn访问_详解mpvue小程序中怎么引入iconfont字体图标
  7. matlab weibpdf函数,matlab建模常用函数
  8. python字典编码_Python列表,字典,元组,字符串操作,文件操作,字符编码
  9. 环境部署(二):Linux下安装jenkins
  10. drop user和drop user cascade的区别
  11. ctf练习之音频文件
  12. 【qt】QWS和 QPA
  13. Python网络爬虫数据采集实战:基础知识
  14. FFFfrance博客介绍
  15. 应用市场首发,APP推广如何应对
  16. “马赛克”真能去除了?老司机狂喜!
  17. 共射级放大电路—密勒电容影响下的压摆率
  18. 程序化广告(5):广告投放
  19. 淘宝信誉查询软件 官网免费版
  20. BT.656接口速率

热门文章

  1. javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你
  2. 对简单单元格的增删改
  3. 使用SeaJS实现模块化JavaScript开发【转】
  4. Streams那些事之概述与原理
  5. hdu 1789 Doing Homework again
  6. UA OPTI570 量子力学32 参考系与绘景
  7. UA MATH571A 一元线性回归II 统计推断1
  8. HTTP 调试工具httpdebug 使用示例
  9. table 隔列换色
  10. 二级联动,三级联动,初学者,纯javascript,不含jQuery