LeetCode随缘刷题之两数相加
逐步解释,有说错的地方欢迎指正。
package leetcode.day_12_03;
/**
* 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
* <p>
* 请你将两个数相加,并以相同形式返回一个表示和的链表。
* <p>
* 你可以假设除了数字 0 之外,这两个数都不会以 0开头。
* <p>
* 示例 1:
* <p>
* 输入:l1 = [2,4,3], l2 = [5,6,4]
* 输出:[7,0,8]
* 解释:342 + 465 = 807.
* 示例 2:
* <p>
* 输入:l1 = [0], l2 = [0]
* 输出:[0]
* 示例 3:
* <p>
* 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
* 输出:[8,9,9,9,0,0,0,1]
*
* @author soberw
*/
public class AddTwoNumbers0002 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//创建一个空的链表,指定一个头指针,可以是任何数,空着也行,这里我写的0
ListNode ahead = new ListNode(0);
//将用于存放链表的数据,我们都知道这里的赋值是复制的地址值,所以他们其实指向同一个地址
ListNode current = ahead;
//用于存放十位(即如果7+8=15 carry就是存放十位的1的)
int carry = 0;
//循环的终止条件是如果两个参数链表都为空
while (l1 != null || l2 != null) {
//创建两个变量分别存放值,如果已经走到头了就赋值为0
int x = l1 != null ? l1.val : 0;
int y = l2 != null ? l2.val : 0;
//计算和,这里加上carry可能不好理解,其实就是简单的数学知识,个位数上的10在十位数上就是1
//就是说在个位数加上10,相当于在十位数加上1
int sum = x + y + carry;
//转换为十位数
carry = sum / 10;
//存放在预定的链表中(注意格式)
current.next = new ListNode(sum % 10);
//链表向后走,指向下一个空指针
current = current.next;
//如果后面还有元素就向后走
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
//最后剩余的一位不能漏
if (carry != 0) {
current.next = new ListNode(carry);
}
//要知道头结点从来都没变过,我们变得只是current的指向,所以我们返回头结点的next就行了
return ahead.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
测试通过结果:
LeetCode随缘刷题之两数相加的更多相关文章
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- letcode刷题之两数相加
letcode里面刷题,坑还是链表不熟,(1)头结点还是有必要设置,否则返回的时候找不到位置:(2)先设置next到新节点再next到下一个节点:都是基础知识 /* * * You are given ...
- LeeCode第一次刷题(两数相加)
题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...
- LeetCode(2): 两数相加
本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...
- LeetCoded第2题题解--两数相加
2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- 【LeetCode刷题】——两数之和.1
---恢复内容开始--- 一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西, 就记录一下遇到的问题. 首先 ...
- LeetCode刷题 - (01)两数之和
题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- LeetCode每天一题之两数之和
这个LeetCode刷题系列的博客权当是为自己记一下笔记吧.博客系列会从LeetCode的第一题开始刷,同时会从零开始学习[因为我就是零/(ㄒoㄒ)/~~].同时,如果有写错的地方,希望大佬们在评论区 ...
随机推荐
- x86-2-保护模式(protect mode)
x86-2-保护模式(protect mode) 引入保护模式的原因: 操作系统负责计算机上的所有软件和硬件的管理,它可以百分百操作计算机的所有内容.但是,操作系统上编写的用户程序却应当有所限制,比如 ...
- 【计项02组01号】Java版图形界面计算器
Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...
- nginx - win系统启动一闪而过 ,服务没有启动成功
这种现象是因为配置文件里配置的服务监听端口被占了
- 解决MySQL服务器禁止远程连接的问题
1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- POJCrossing River
http://poj.org/problem?id=1700贪心问题 对于一个安排,怎么样是最小的?首先关于花费,对于每次运输,以最节约的方式运输.两种情况,一种最轻的作为往返,另外 一种是每次带一个 ...
- [C语言基础] 数组与指针之间的引用
通过指针引用数组,通过数组引用指针,你搞明白了么?通过下面3种情形来了解一下数组和指针 Case 1. unsigned char arry[10]; unsigned char *ptr; unsi ...
- Centos下安装Scala(2)
1.下载压缩包 命令:wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz 2.解压缩包 命令:tar -xzvf sc ...
- 12.25 补充总结-jsp标签
注:标签引用时,需在jsp 头部添加如下语句 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c ...
- 【刷题-LeetCode】211. Add and Search Word - Data structure design
Add and Search Word - Data structure design Design a data structure that supports the following two ...
- Cesium入门3 - Cesium目录框架结构
Cesium入门3 - Cesium目录框架结构 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ app目录 下 ...