题目链接

题目描述

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

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

您可以假设除了数字 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 q = l1, p = l2;
ListNode dummyHead = new ListNode(0);
ListNode carr = dummyHead;
int carry = 0;
while (q != null || p != null) {
int x = q != null ? q.val : 0;
int y = p != null ? p.val : 0; int sum = x + y + carry; carry = sum / 10; carr.next = new ListNode(sum % 10);
carr = carr.next;
if (q != null) q = q.next;
if (p != null) p = p.next;
} if (carry > 0) {
carr.next = new ListNode(carry);
}
return dummyHead.next;
}
}

手记

carry(进位)是一个很重要的变量,两个一位数相加,进位只可以是 0 或 1 ,两个数相加再加前数的进位,最大值也只为 19,例如 96 + 97,个位相加:得 3 进 1,十位相加为:9 + 9 + 1 = 19。

再看此题,链表为逆序存储数字,我们读取数字时,就是从最低位开始的,这符合我们的运算习惯。我们每读取两个链表的各一位数字,便将它们与前进位相加,结果超过 10 的部分为本次运算的进位,不超过 10的部分为本次运算留在本位的值,只要两个链表有一个不为空,两个链表将再次进位计算。

30行代码表示,如果计算结束,但上次进位值大于 0(值为 1),则将进位补到最高位。

很不错的题,优解的写法看的让人着迷。

以上

最新文章

  1. 存储程序(2)——MYSQL
  2. 阿里云windows 2012服务器部署java web程序教程
  3. 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”
  4. 使用管道符在PowerShell中进行各种数据操作
  5. 使用Script Component源处理不规则平面文件
  6. PHP5 Session 使用详解(一)
  7. JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码
  8. lintcode :同构字符串
  9. devexpress中gridview控件编辑时改变输入法状态
  10. MyISAM与InnoDB的区别
  11. 字符串String类
  12. MySQL优化必须调整的10项配置
  13. Goodle Clean设计架构
  14. oracle_windows下命令启动oracle监听和服务
  15. 【Scala】Scala之Classes and Properties
  16. JS时间处理由CST格式转成GMT格式时间
  17. C# 实现WebSocket通信
  18. Asp.Net Core实战(干货)
  19. laravel 同数据表字段比较查询和状态不正规排序
  20. Office2010安装需要MSXML版本6.10.1129.0的方法

热门文章

  1. Windows 与 Linux 、esxi下面查看内存容量和数量
  2. 用JS写一个网站树形菜单
  3. R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结
  4. Java提升四:Stream流
  5. Python 常用的标准库以及第三方库有哪些?
  6. 每天一点点之vue框架学习 - uni-app 修改上一页参数
  7. POJ 3254:Corn Fields
  8. WIN10打开资源管理器显示该文件没有与之关联的程序来执行该操作.请安装应用,请在“默认应用设置”..关联 —— 解决方案
  9. MSVCRTD.LIB和LIBCMTD.LIB冲突(转载)
  10. 获取指定进程号,并kill掉