题目:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

思路:
其实就是将整数相加,只不过这里各个位放在了链表中,要考虑到进位,且如果进位后,原先已无节点,要自己new一个节点。具体思路见注释。

代码:

/*** 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) {ListNode* newnode1 = l1;//初始化newnode1、newnode2分别指向l1、l2ListNode* newnode2 = l2;ListNode* pre1;//用来指向前一个节点ListNode* pre2;int flow = 0;//当前位的进位int res = 0;//用来计算当前位的和+flowwhile (newnode1&&newnode2){//如果当前位两个链表都有值 res = newnode1->val + newnode2->val+flow;//就将两个链表当前位的值和flow相加newnode1->val = res % 10;//res对10取余,即为相加后的值,赋给newnode1和newnode2当前位newnode2->val = newnode1->val;flow = res / 10;//计算当前位的flowpre1 = newnode1;//此时pre1、pre2指向newnode1和newnode2,保留这两个位置pre2 = newnode2;newnode1 = newnode1->next;//newnode1、newnode2分别指向它们的下一个newnode2 = newnode2->next;}if (newnode1 == NULL&&newnode2 != NULL){//如果newnode1为空而newnode2不为空while (newnode2 && (newnode2->val + flow) >= 10){//当newnode2不为空且newnode2的值+flow>=10时res = newnode2->val + flow;//计算resnewnode2->val = res % 10;//将res对10取余赋给newnode2当前位flow = res / 10;//计算当前位的flowpre2 = newnode2;//pre2继续保留newnode2newnode2 = newnode2->next;//newnode2指向下一个位置}//跳出while循环后,有两种情况if (newnode2==NULL&&flow != 0){//如果是newnode2==NULL,且此时flow不为0pre2->next = new ListNode(flow);//要将pre2指向一个新建的节点,且值为flow}else if ((newnode2->val + flow) < 10){//如果是newnode2->val+flow<10,也就是不会再进位newnode2->val += flow;//当前位直接加flow}return l2;//最终返回l2即可}else if (newnode1 != NULL&&newnode2 == NULL){//newnode1不为空且newnode2为空时,逻辑和前一个一样,只是返回l1while (newnode1 && (newnode1->val + flow) >= 10){res = newnode1->val + flow;newnode1->val = res % 10;flow = res / 10;pre1 = newnode1;newnode1 = newnode1->next;}if (newnode1==NULL&&flow != 0){pre1->next = new ListNode(flow);}else if ((newnode1->val + flow) < 10){newnode1->val += flow;}return l1;//返回l1}else if (newnode1 == NULL&&newnode2 == NULL){//如果两个都为空if (flow != 0){//但是进位不为0pre1->next = new ListNode(flow);//随便将pre1或者pre2的下一个指向一个new的节点,值为flow}return l1;//如果是用pre1,则返回l1;如果是用pre2,则返回l2}}
};

输出结果: 32ms

LeetCode 2. Add Two Numbers相关推荐

  1. LeetCode之Add Two Numbers

    LeetCode之Add Two Numbers 题目:You are given two linked lists representing two non-negative numbers. Th ...

  2. LeetCode 445. Add Two Numbers II

    LeetCode 445. Add Two Numbers II Solution1:我的答案 利用了栈,这样就不用翻转链表了... /*** Definition for singly-linked ...

  3. 【注意】LeetCode 2. Add Two Numbers

    LeetCode 2. Add Two Numbers 这种沙比提怎么都写不对了??? Solution1:学习这种写法 /*** Definition for singly-linked list. ...

  4. LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法

    题目地址:Add Two Numbers II - LeetCode You are given two non-empty linked lists representing two non-neg ...

  5. [Leetcode] 445. Add Two Numbers II

    问题: https://leetcode.com/problems/add-two-numbers-ii/#/description 思路:该题与"415. Add Strings" ...

  6. LeetCode:2. Add Two Numbers

    https://leetcode.com/problems/add-two-numbers/description/ 内容描述 You are given two non-empty linked l ...

  7. leetcode 【 Add Two Numbers 】 python 实现

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  8. leetcode 2. Add Two Numbers | 2. 两数相加(Java)

    题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 需要注意 当两个链表不一样长时 的收尾处理. /*** Definition for ...

  9. Leetcode: 2. Add Two Numbers

    一直想用一个进位变量来存贮进位值,但老是考虑不周全,下面是我自己写的bug代码,考虑不周,因为l1或者l2都有可能为null class Solution {public ListNode addTw ...

最新文章

  1. Transformer 又立功了!又快(420 fps)又好的车道线检测算法
  2. spring InitializingBean接口分析
  3. oracle数据迁移常用
  4. r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)
  5. linux分配iomem,Linux中__iomem
  6. 6个座位办公室最佳位置_一天中6个最佳的护肤时间,你知道几个?
  7. 查看某个文件是否正在被修改
  8. c++ 多线程 垃圾回收器_并行并发CMS垃圾回收器:-XX:+UseConcMarkSweepGC
  9. LoadRunner10自带的WEBTOURS,无法显示Flights页面问题解决办法
  10. Lync Server 2013企业版部署系列之一:部署环境介绍
  11. [LeetCode#81]Search in Rotated Sorted Array II
  12. 【shell 脚本】删除/var/log 下的日志
  13. 2019 序列号_苹果序列号知识扫盲:iPhone序列号含义与查询真伪全攻略
  14. memcache源码编译安装
  15. WinRAR 5.21 32位+64位 烈火中文美化破解版(最流行的压缩解压工具)
  16. 项目管理工具——PDCA管理循环
  17. 如何斩获KDD Cup 2020两冠一季?美团广告团队公开解决方案
  18. java 夏令时jvm设置问题
  19. linux下运行workman,笔记:Linux(AWS Redhat)开机启动workman进程(/etc/rc.local必须是755权限)...
  20. 计算机组成原理静态存储器实验报告,静态随机存储器实验报告计算机组成原理...

热门文章

  1. linux交叉编译+驱动,请教驱动程序交叉编译问题(初学)
  2. scm中mysql作用_scm项目问题
  3. Django终端运行报错:ImportError: DLL load failed while importing _sqlite3: 找不到指定的模块。
  4. node后台截图 box-shadow无效-解决
  5. chartjs更新数据 vue_vue.js - 在vue中 怎么更改chart图表的文字大小
  6. layui select动态赋值_layui与 VUE 配合使用时动态渲染 select 坑
  7. 图片照片展示html5模板
  8. 百度百科推广大师 v1.7.6.1
  9. mac npm全局安装权限不足问题解决
  10. vue请求封装,Store-状态管理部分(文档笔记)