一.前言

  今天开始第二题,有句话写给自己也写给大家,Rome wasn’t built in one day!算法很难,刷题的过程也很痛苦,但是只要我们能坚持下去,以后的收获将会是巨大的。希望我们都能够坚持下去,人人都能成为大神。

二.题目

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

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

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

  示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

     输出:7 -> 0 -> 8

       原因:342 + 465 = 807

三.解题思路

  这道题的解题思路其实十分明确,从两个链表的头开始相加,结果保存在新链表中。有两点要注意的,一个是就是要注意有进位的情况出现,所以我们需要定义一个全局变量来表示本次计算是否产生了进位。另外一点就是要考虑链表不等长的情况,容易出现空指针异常。话不多说,代码如下:(为了防止有人看不懂,注释写的很仔细,请大家见谅)

  

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建一个新的链表用于保存相加之后的结果ListNode result = new ListNode(0);//创建一个指针,用来指向当前所在的节点ListNode cur = result;//创建一个全局变量,用来表示本次计算是否产生进位,初始值为0int advance = 0;//只要两个链表有一个不为空,就会一直循环,跳出循环时,表示两个链表都已经走完,则计算完毕while(l1 != null || l2 != null){//定义sum变量,用来保存两数相加(包含上一次计算所产生的进位)的结果int sum;//根据链表长度,sum的值可分为三种结果if(l1 != null && l2 != null){sum = l1.val + l2.val + advance;}else if(l1 != null){sum = l1.val + advance;}else{sum = l2.val + advance;}//sum如果超过了10,则要产生进位if(sum >= 10){sum -= 10;advance = 1;}else{advance = 0;}//l1指向下一个节点if(l1 != null){l1 = l1.next; }//l2指向下一个节点if(l2 != null){l2 = l2.next;}//将本次计算结果,保存在当前节点中cur.val = sum;//判断是否两个计算链表都为空if(l1 == null && l2 == null){//如果两个链表为空,但是本次计算产生了进位,那么进位就作为下一个节点的值//如果没有产生进位,则表示计算结束,当前节点为最后节点,直接跳出循环if(advance != 0){cur.next = new ListNode(advance);}break;}//只要还有一个计算链表不为空,就表示还会有计算结果,所以cur要继续往下走cur.next = new ListNode(0);cur = cur.next;}//计算结束,返回结果链表return result;}
}

    这是我的解法,如果大家有更好的思路和算法,欢迎和我分享,谢谢!

算法实战(二)两数相加相关推荐

  1. LeetCode实战:两数相加

    题目英文 You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  2. 刻意练习:LeetCode实战 -- Task10. 两数相加

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  3. 两数相加——哈希表算法

    力扣刷题总结 一.前言 二.两数相加 1.题意 2.示例 3.题目解析 4.官方题解 思路分析 哈希表算法的优势: 思路及算法: 代码分析 C语言代码实现及详细注释说明: python代码实现及详细注 ...

  4. 【每日一算法】两数相加

    微信改版,加星标不迷路! 每日一算法-两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

  5. js 实现两数相加的算法

    关于算法 两数相加 (leetcod上的的一道算法题) 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我 ...

  6. 【数据结构与算法】之深入解析“两数相加II”的求解思路与算法示例

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

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

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

  8. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  9. 【LeetCode】2.两数相加

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

最新文章

  1. java jquery提交表单_Jquery ajax提交表单几种方法
  2. golang 调用c代码
  3. linux欢迎信息打印本机ip,Linux shell 登录显示欢迎信息或机器信息(示例代码)
  4. php项目安装器,php服务器环境安装及项目搭建
  5. 工作153:position使用
  6. 探究make_shared效率
  7. linux wifi pro6818,GEC6818连接Ubuntu,下载程序至开发板
  8. mybatis的缓存机制是怎么样的?
  9. Linux使用tcpdump抓获取WIFI包
  10. python网络编程知识_python六十七课——网络编程(基础知识了解)
  11. loadrunner基础学习笔记二
  12. mysql查看表编码_MySQL中使用SQL语句查看某个表的编码方法
  13. 一切皆是映射:浅谈操作系统内核的缺页异常(Page Fault)
  14. 使用Cloudflare给域名添加跳转/301重定向
  15. ActionScript快速对照表
  16. 华为鸿蒙推送机型,华为鸿蒙系统开始推送,这15款机型可率先升级,有你的吗?...
  17. 网易im 会话列表不显示的问题
  18. vue 后台翻译_vue国际化 自动百度翻译,优先本地语言库
  19. 你日复一日的生活,就是一场漫长的修行
  20. 【历史上的今天】9 月 13 日:“海盗湾”创始人出生;第一台装载硬盘的超级计算机;《超级马里奥兄弟》发布

热门文章

  1. Jetson Nano、TX2等 conda 虚拟环境中使用TensorRT、gi等
  2. Python制图常用设置
  3. vivado使用tcl脚本一键生成mcs文件
  4. P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布(结构体)
  5. 21 天入门机器学习-第05期
  6. 惋惜 | 北京这所211大学清退59名博士生!
  7. Ae488 4K高科技数字识别触摸屏幕ui元素动画钢铁侠模块化hud图形用户界面ae模板
  8. Java 实现批量重名
  9. Python实现一个总体的均值、比例、方差检验
  10. oracle view占资源,关于VIEW PUSHED PREDICATE的一个优化案例