【002-Add Two Numbers (单链表表示的两个数相加)】


原题

  You are given two linked lists representing two non-negative numbers. 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.
  Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
  Output: 7 -> 0 -> 8

题目大意

  有两个单链表。代表两个非负数,每个节点代表一个数位。数字是反向存储的。即第一个结点表示最低位。最后一个结点表示最高位。求两个数的相加和,而且以链表形式返回。

解题思路

  对两个链表都从第一个開始处理,进行相加,结果再除以10求商。作为下一位相加的进位。同一时候记录余数,作为本位的结果,一直处理,直到全部的结点都处理完。

代码实现

 /*** 002-Add Two Numbers (单链表表示的两个数相加)* @param l1 第一个数* @param l2 第二个数* @return 结果*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}ListNode p1 = l1;ListNode p2 = l2;ListNode root = new ListNode(0); // 头结点ListNode r = root;root.next = l1;int carry = 0; // 初始进位int sum;while (p1 != null && p2 != null) {sum = p1.val + p2.val + carry;p1.val = sum % 10; // 本位的结果carry = sum / 10; // 本次进位r.next = p1;r = p1; // 指向最后一个相加的结点p1 = p1.next;p2 = p2.next;}if (p1 == null) {r.next = p2;} else {r.next = p1;}// 最后一次相加还有进位if (carry == 1) {// 開始时r.next是第一个要相加的结点while (r.next != null) {sum = r.next.val + carry;r.next.val = sum % 10;carry = sum / 10;r = r.next;}// 都加完了还有进位。就要创建一个新的结点if (carry == 1) {r.next = new ListNode(1);}}return root.next;}
}

评測结果

  点击图片,鼠标不释放,拖动一段位置,释放后在新的窗体中查看完整图片。

特别说明

欢迎转载,转载请注明出处【http://blog.csdn.net/DERRANTCM/article/details/46905467】

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】...相关推荐

  1. 【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】

    [015-3 Sum(三个数的和)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an array S of n integers, are there ...

  2. 【LeetCode-面试算法经典-Java实现】【054-Spiral Matrix(螺旋矩阵)】

    [054-Spiral Matrix(螺旋矩阵)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a matrix of m x n elements (m ...

  3. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】...

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

  4. 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)】...

    [129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...

  5. 【LeetCode-面试算法经典-Java实现】【226-Invert Binary Tree(反转二叉树)】

    [226-Invert Binary Tree(反转二叉树)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun- ...

  6. 【LeetCode-面试算法经典-Java实现】【198-House Robber(抢劫犯)】

    [198-House Robber(抢劫犯)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun-Chao] 原题 ...

  7. LeetCode久不久来一题系列之Add Two Numbers

    题目来源: https://leetcode.com/problems/add-two-numbers/description/ 题目: Add Two Numbers 题目描述: You are g ...

  8. TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)

    TypeScript数据结构与算法专题 - [单链表4] 单链表节点的`两-两`反转的实现 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:https://blo ...

  9. Java 两个数相加的测试_Java 两个数字相加

    1.两个数字相加 Java中将两个数字相加: 例如:int x = 5; int y = 6; int sum = x + y; System.out.println(sum); // 打印输出 x ...

最新文章

  1. 超详细教你10分钟搭建一个高端的B2B2C模式的综合性商城|含来客推V3源码下载
  2. C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast
  3. SaaS颠覆传统软件到底是不是个伪命题?
  4. fcntl函数完成 set_fl()函数还有clr_fl()函数的封装
  5. Kinect开发笔记之八C#实现Kinect声音的追踪
  6. 腾讯与微软合作,准备应用Silverlight技术
  7. Node.js学习准备篇
  8. Python字符串index()方法应用案例一则
  9. 《Java 8 in Action》Chapter 12:新的日期和时间API
  10. 2038年问题 php,php strtotime() mktime() 的2038年问题 Y2K38漏洞
  11. 计算机第二学期末考试题,离散数学期末考试试题及答案
  12. matlab小波变换、离散小波变换函数使用
  13. 微软Kinect完全拆解
  14. 第17章 其他数据库日志【4.日志与备份篇】【MySQL高级】
  15. android 获取root权限原理解析,手机如何获得root权限 原理以及作用是什么
  16. excel从右边查找字符并截取
  17. C4D-学习笔记-4-渲染(ProRender渲染介绍)
  18. 数据加密解决方案有哪些?
  19. 浙江省计算机二级c上机考试题,浙江省计算机二级c语言上机考试真题
  20. Python-opencv学习第二课:图像色彩

热门文章

  1. android 自动挂断,[转]android 来电自动接听和自动挂断
  2. Struts2.x中获取request,response,session的方式
  3. 《Python Cookbook 3rd》笔记(2.20):字节字符串上的字符串操作
  4. 三目运算符_C语言知识点:运算符的优先级和结合性
  5. 针对Algorand所使用的密码相关技术细节进行介绍
  6. 全球通吃的九大黄金专业
  7. predict_16x16[i_mode]( p_dst, i_stride )lowres
  8. Failed to install Tomcat7 service 解决
  9. python基本语法:元组
  10. 大三了,计算机专业学生的困惑。 [转]