LeetCode02 - 两数相加(Java 实现)
LeetCode02 - 两数相加(Java 实现)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
Java 实现与实现思路
/**
* <p>
* 02: 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
* 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
* 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
*
* @author XiaoPengwei
* @since 2019-07-14
*/
public class LeetCode02TwoAdd {
public static void main(String[] args) {
// 链表 1
ListNode list1Node1 = new ListNode(2);
ListNode list1Node2 = new ListNode(4);
ListNode list1Node3 = new ListNode(3);
list1Node1.next = list1Node2;
list1Node2.next = list1Node3;
// 链表 2
ListNode list2Node1 = new ListNode(5);
ListNode list2Node2 = new ListNode(6);
ListNode list2Node3 = new ListNode(4);
list2Node1.next = list2Node2;
list2Node2.next = list2Node3;
ListNode resListNode = addTwoNumbers(list1Node1, list2Node1);
listNodePrint(resListNode);
}
/**
* 注意逆序
* 注意引用类型
*
* @param listNode1 链表 1
* @param listNode2 链表 2
* @return listNode
*/
public static ListNode addTwoNumbers(ListNode listNode1, ListNode listNode2) {
// 这里一方面是为了提高可读性,一方面是为了保留原来的 listNode1(引用类型,修改 p 也会修改 l1 的值)
// 保留 listNode1 是为了最后的返回,因为 p 会走到 listNode1 最后的结点,要返回的是头结点
ListNode p = listNode1;
ListNode q = listNode2;
// addNum 表示十位的数,即表示进位
int addNum = 0;
// 直到 q.next == null
while (q != null) {
// 因为链表长度不一定相等,如果有一个到头,另一个不到头,则将到头链表的空的位置补 0
if (p.next == null && q.next != null) {
p.next = new ListNode(0);
}
if (p.next != null && q.next == null) {
q.next = new ListNode(0);
}
// 真正的和
int sumAll = addNum + p.val + q.val;
p.val = sumAll % 10;
// 下一次进位
addNum = sumAll / 10;
// 如果两个链表都到头了,且还有未处理的进位,则将进位挂在后面(即最后一个,即最高位)
if (p.next == null && q.next == null && addNum != 0) {
p.next = new ListNode(addNum);
}
p = p.next;
q = q.next;
}
return listNode1;
}
/**
* 递归打印
*
* @param listNode 需打印的链表
*/
public static void listNodePrint(ListNode listNode) {
if (listNode == null) {
return;
}
if (listNode.next == null) {
System.out.println(listNode.val);
return;
}
System.out.println(listNode.val);
listNodePrint(listNode.next);
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
LeetCode02 - 两数相加(Java 实现)的更多相关文章
- leetcode 2 两数相加 JAVA
题目: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示 ...
- 两数相加(java版本)
(一).单链表实现 package com.lin.leetcode.addTwoNumbers; /** * Created by Yaooo on 2019/8/26. */ public cla ...
- ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- LeetCode 2——两数相加(JAVA)
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- Java实现 LeetCode 445 两数相加 II
445. 两数相加 II 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
- LeetCode(2):Add Two Numbers 两数相加
Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
随机推荐
- ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
该错误原因是libpython3.6m.so.1.0不存在 解决方案 1.查看/usr/lib/x86_64-linux-gnu/目录下是否存在libpython3.m.so.1.0文件,或者直接全盘 ...
- SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是fe ...
- HA cluster
------------恢复内容开始------------ 集群分类: LB负载均衡集群(lvs/nginx(http/upstream, stream/upstream)),HA高可用集群,HP高 ...
- C语言Ⅰ博客作业10
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10097 我在这个课程的 ...
- PTA(Advanced Level)1075.PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...
- Linux系列:进阶之tomcat安装
思路:作者是在Windows上从Apache官网下载的tomcat,之后将tomcat文件放到我的ftp站点中,在Linux访问ftp站点下载tomcat文件 ,将tomcat放在我自己的安装目录中, ...
- 基于全备份+binlog方式恢复数据
基于全备份+binlog方式恢复数据 将bkxt从库的全备份在rescs5上恢复一份,用cmdb操作 恢复全备后执行如下操作 set global read_only=OFF; stop slave; ...
- iview给布局MenuItem标签绑定点击事件
@click.native="menuHandleClick"
- SpringBoot 进阶
SpringBoot 进阶 这里讲两个小方面: 表单验证 AOP 1. 表单验证 SpringBoot 中的表单验证功能步骤如下: 在 controller 类中将用 @PathVariable 和 ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...