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_两数相 ...
随机推荐
- 使用vue-lbsmap快速开发地图应用/GPSBD
vue-lbsmap是一款基于vue的WebGIS地图插件,经过我们多年实际项目应用中积累的技术,打造的灵活.易用.数据驱动型插件,可以帮助您快速开展地图业务层的应用开发,完全免费 <!DOCT ...
- IntelliJ IDEA打jar时常遇见的问题
1.打包的时候提示 manifest.mf already exists in vfs 解决方案:这个文件夹删除掉,再重新build打包即可 2. 第一个选择“extract to the targ ...
- 怎么将本地项目放到码云(gitee)上面?图文详解
git的好处什么的,在此就不多赘述.现在很多公司都在用git了. 那么怎么将本地已经有的项目放到码云(gitee)上呢? 前置条件说明: 1:原来项目所在位置:D:\workspace01\class ...
- VC/MFC 进程间通信方法总结
摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程 / 多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的. M ...
- Python安装及环境变量
针对windows操作系统 1.下载安装包,python官网下载(https://www.python.org/) python3.7.4:下载https://www.python.org/downl ...
- OAuth授权看这篇就够了
OAuth授权看这篇就够了
- 16-Perl 文件操作
1.Perl 文件操作Perl 使用一种叫做文件句柄类型的变量来操作文件.从文件读取或者写入数据到文件需要使用文件句柄.文件句柄(file handle)是一个I/O连接的名称.Perl提供了三种文件 ...
- vue 换肤
/* eslint-disable */ // 设置文件 import setting from "@/setting.js"; const themeList = setting ...
- c# 多线程使用队列顺序写日志的类 (需要再优化)
using System; using System.Collections.Generic; using System.Threading; public class LogManager { // ...
- c# winfrom 界面设计
1.在用DotnetBar的RibbonControl时,界面最大化时,会把电脑桌面的任务栏遮盖住: 解决办法:在load事件中写入: , Screen.PrimaryScreen.WorkingAr ...