问题描述:

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

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

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

示例:

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

代码:
初始代码:

class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* l3 = new ListNode();ListNode* node = l3;int flag = 0;while(l1 != NULL && l2 != NULL){int tmp = l1->val + l2->val + flag;node->val = tmp % 10;if(tmp >= 10) {flag = 1;}else flag = 0;if(l1->next != NULL || l2->next != NULL || flag == 1){ListNode* nxt = new ListNode();node->next = nxt;node = node -> next;}else node->next = NULL;l1 = l1->next;l2 = l2->next;}if(l1 != NULL){node->val = l1->val + flag;node->next = NULL;}if(l2 != NULL){node->val = l2->val + flag;node->next = NULL;}if (flag == 1){node->val = flag;node->next = NULL;}return l3;}
};

改进代码:

class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* l3;ListNode* node = new ListNode();l3 = node;int tmp=0;while(l1 || l2){if(node->next){node = node->next;//解决了无进位时新节点存0造成结果错误的问题}if(l1){tmp += l1->val;l1 = l1->next;//指针移动要考虑当前指针是否为空              }if(l2){tmp += l2->val;l2 = l2->next;}node->val = tmp % 10;tmp /= 10;//相当于进位,直接应用到下一次求和运算中,不需要额外保存node->next = new ListNode();}if(tmp){node->next->val = tmp;node->next->next = NULL;}else node->next = NULL;return l3;}
};

改进参考http://reckful.studio/2017/11/07/LeetCode/LeetCode%200002%20-%20Add%20Two%20Numbers/

待解决:
c++不用释放无用节点空间吗?

Leetcode热门100之两数相加相关推荐

  1. LeetCode第二题:两数相加(Add Two Numbers)

    LeetCode第二题:两数相加(python,java) You are given two non-empty linked lists representing two non-negative ...

  2. leetCode刷题 2. 两数相加

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

  3. leetcode链表中的两数相加问题

    2. 两数相加 找出两个链表中较长的链表,原地修改后,作为最后的返回结果 两个链表从前往后遍历,考虑进位,直到短链表结束. 将长链表数值放入结果(考虑进位). 考虑是否需要额外增加一个结点来放进位 c ...

  4. 【LeetCode每周算法】两数相加

    题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是 ...

  5. 力扣热门100题——两数之和(最全解法)

    1.两数之和 1.问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  6. LeetCode(2)——两数相加(JavaScript)

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

  7. 学渣的刷题之旅 leetcode刷题 2. 两数相加

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

  8. LeetCode(Java) 两数相加

    题目描述 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数-),求这个两个数的和,结果也用链表表示. 输入:(2 -> 4 -> ...

  9. leetcode刷题 2.两数相加

    解法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() ...

  10. 【LeetCode笔记】2. 两数相加(JAVA、链表)

    文章目录 题目描述 代码 题目描述 解法:直接用两个链表构造出第三个链表即可 注意点:进位carry.进位的情况有几种,都要考虑上. (其实感觉这道题不是很难,挺直观的) 代码 时间复杂度:O(max ...

最新文章

  1. Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
  2. python是不是特别垃圾-python垃圾回收机制
  3. img=img%3e128 matlab,Matlab中一般的数值计算和使用
  4. android webview 重定向 goback,Android WebView 网址重定向影响 goBack
  5. JavaScript HTML DOM
  6. UVA 1611 Crane
  7. 《java入门第一季》之面向对象(static关键字内存图解)
  8. QQ群下载解除限速小技巧【提高千倍不止】【无需会员】
  9. 【数据结构06】二叉平衡树(AVL树)
  10. 西门子G120C变频器中的参考速度+转速给定原理分析
  11. 2019保定中考计算机时间安排,2019年保定中考考试时间安排,保定中考考试科目时间安排表...
  12. 苹果手机怎么投屏王者荣耀
  13. 使用usb tplink无线网卡搭建无线热点AP
  14. ASP版微信分享JS-SDK代码
  15. 五常大米引入蚂蚁金服区块链,从大米“出生”就开始“验明正身”
  16. 计算机老师新年贺卡祝福语,老师新年贺卡祝福语
  17. 【解题报告】openjudge Freda的越野跑 数据结构与算法mooc 内排序
  18. 深圳买房负担全球第一:记得在泡沫破灭前把房子卖掉
  19. [转] 给土鳖装上鹰的翅膀和眼睛后会怎么样?
  20. simulink实现他励直流电动机减弱磁通调速仿真

热门文章

  1. 无人机和地面三维激光扫描仪在1:500城市基本地形图测绘中的应用
  2. JsonMappingException: Problem deserializing 'setterless' property '': get method returned null
  3. 最难忘的一节计算机课,最让我难忘的一节课作文「共5篇」
  4. 软件测试面试两分钟自我介绍
  5. C++入门基础(上)
  6. java编写时间流逝_JAVA日期时间类如何使用
  7. 复杂网络盘传播搜索关键字
  8. Android桌面插件宽度,android 屏幕适配插件
  9. HTML动漫设计公司响应式网站模板期末大作业0023
  10. 服务器的显示器无信号怎么解决办法,显示器无信号怎么办?显示器无信号解决办法大全...