题目大意:使用链表表示的两个整数,计算出其和,以同样的形式返回。

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

觉得做OJ最大的问题是有时看不懂题目。

其实是这样的,一个链表代表一个非负整数数,是从右往左看的:

(2 -> 4 -> 3) = 342;

(5 -> 6 -> 4)=465;

342+465=7 -> 0 -> 8=807;

逆序其实是很大很大的便利!!!!

因为最左边是个位,只要这样一个个加,在考虑进位就好了。而且个位数相加,进位只能是1.

如果左边是最高位就麻烦了,因为数都是从最低位开始加的,还要遍历到最右边什么的。

所以思路如下:

1、一个用来记录进位的变量

2、如果两个链表都非空,把结点得数取出来,相加,对10取余构造新结点,记录进位。list=list.next

3、如果任意一个链表空了,就直接以他的结点构造新结点。

public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

ListNode temp1 = l1;
ListNode temp2 = l2;

int temp =temp1.val+temp2.val;

//System.out.println("first------->"+temp);

int jinwei = 0;

if(temp>=10){

temp%=10;
jinwei=1;

}

temp1=temp1.next;
temp2=temp2.next;

ListNode result = new ListNode(temp);
ListNode resulttemp = result;

while(temp1!=null&&temp2!=null){

//连个链表都有结点,则两节点相加
temp =temp1.val+temp2.val;

//如果前面有进位
if(jinwei==1){

temp++;
jinwei--;

}

//考虑进位

if(temp>=10){

temp%=10;
jinwei=1;

}

resulttemp.next = new ListNode(temp);

temp1=temp1.next;
temp2=temp2.next;
resulttemp=resulttemp.next;

}
while(temp1!=null){

if(jinwei==1){

int t1 = ++temp1.val;
jinwei--;

if(t1>=10){

t1%=10;
jinwei++;

}

resulttemp.next = new ListNode(t1);

}
else{

resulttemp.next = new ListNode(temp1.val);

}
resulttemp=resulttemp.next;
temp1=temp1.next;

}
while(temp2!=null){

if(jinwei==1){

int t2 = ++temp2.val;
jinwei--;

if(t2>=10){

t2%=10;
jinwei++;

}

resulttemp.next = new ListNode(t2);

}
else{

resulttemp.next = new ListNode(temp2.val);

}
resulttemp=resulttemp.next;
temp2=temp2.next;

}
if(temp1==null&&temp2==null&&jinwei==1)
resulttemp.next = new ListNode(1);

return result;

}
}

所以说,大数的构造就应该这样构造,虽然是一道加法题,但是加减乘除都能很好的支持。

一开始想的是,把数取出来,然后构造一个数,再相加,然后再构造链表就行。但这样是错误的!!!

因为传入的链表可能很长很长,用long都会溢出的超级大数!

而且,这个代码是直接在LeetCode上写的,其实也挺方便,毕竟我只用printf来调试。也就是没了代码补全而已,不过不用写main函数也好。

LeetCode题解 #2 Add Two Numbers的更多相关文章

  1. 《LeetBook》LeetCode题解(2):Add Two Numbers [M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  2. leetcode题解2. Add Two Numbers

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

  3. LeetCode 题解之Add Two Numbers II

    1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Lis ...

  4. LeetCode题解之Add two numbers

    1.题目描述 2.题目描述 题目思路可以参考合并单链表的思路,定义一个全局 进位标志,如果两个数值相加得到需要进位,则将进位标志置为1 . 3.代码 ListNode* addTwoNumbers(L ...

  5. leetcode 第二题Add Two Numbers java

    链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...

  6. 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...

  7. C# 写 LeetCode Medium #2 Add Two Numbers

    2. Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. ...

  8. LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表

    题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...

  9. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)

    https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...

随机推荐

  1. 一个html+js+ashx+easyui+ado.net权限管理系统

    http://www.cnblogs.com/oppoic/p/html_js_ashx_easyui_authorize.html

  2. 《模式 工程化实现及扩展 (设计模式 C#版)》 - 书摘精要

    (P3) 面向对象的典型原则可以划分为两类 —— “面向类”的和“面向包”的: “面向类”的,包括:SRP —— 单一职责原则:OCP —— 开放封闭原则:LSP —— 里氏替换原则:DIP —— 依 ...

  3. laravel发送邮件

    这里已163为例: 1..env文件配置和mail.php配置(默认使用.env) MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL ...

  4. Android WebView remote debugging

    /***************************************************************************** * Android WebView rem ...

  5. php 中的杂项函数

    1.$arr = range(1, 10);   print_r($arr); Array(    [0] => 1    [1] => 2    [2] => 3    [3] = ...

  6. [转载] ffmpeg摄像头视频采集-采集步骤概述并采集一帧视频

    近期由于工作任务,需要开发一个跨平台视频聊天系统,其中就用到了ffmpeg进行采集与编码,网上找了一大堆的资料,虽然都有一些有用的东西,但实在太碎片化了,这几天一直在整理和实验这些资料,边整理,边做一 ...

  7. CentOS 6+Hadoop 2.6.0分布式集群安装

    1.角色分配 IP Role Hostname 192.168.18.37 Master/NameNode/JobTracker HDP1 192.168.18.35 Slave/DataNode/T ...

  8. 洛谷 P1292 倒酒

    题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不 ...

  9. jfrog artifactory docker 安装试用

    预备环境(docker 安装模式,使用的免费版本): docker-ce (启用镜像加速) 1. 镜像拉取 docker.bintray.io/jfrog/artifactory-oss 2. 启动 ...

  10. 关于Spring框架你解多少?

    类似于谈谈你对Spring的了解的题目,在很多面试中都会被提到的. Spring,英文意思是春天的意思.在java的世界里,Spring是一个现时非常流行的开源应用框架. Spring 框架是一个分层 ...