【Leetcode】445. Add Two Numbers II
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7
Tips:给定两个单链表,将两个单链表中的值相加。
思路:链表都是按照从前到后连接的,而整数加法需要从低位开始相加,即链表的后面开始相加。
我才用两个list来保存链表的val,按照从后向前的顺序相加,并将结果保存在一个list中。最后将list按照从后向前的顺序,赋值给一个新的链表。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
while (l1 != null) {
list1.add(l1.val);
l1 = l1.next;
}
while (l2 != null) {
list2.add(l2.val);
l2 = l2.next;
}
int len1 = list1.size();
int len2 = list2.size();
//将较长的链表保存在list1中
if (len1 < len2) {
List<Integer> temp = list2;
list2 = list1;
list1 = temp;
}
int len = len1 > len2 ? len1 : len2;// 最后链表的长度为len或者len+1
System.out.println(len);
List<Integer> list = new ArrayList<>();
int diff = Math.abs(len1 - len2);
int tag = 0;
//从后向前进行整数加法。
for (int i = len - 1; i >= 0; i--) {
//如果两个链表长度不相等,保证右对齐 ,先将能对其的位置相加.剩下的位置只加list1即可
int temp = tag + list1.get(i);
if (i - diff >= 0) {
temp += list2.get(i - diff);
}
if (temp >= 10) {
//进1
tag = 1;
temp -= 10;
} else {
tag = 0;
}
list.add(temp);
}
if (tag > 0)
list.add(1);
//打印list中的值
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
ListNode head = new ListNode(-1);
ListNode node = new ListNode(0);
head.next = node;
//将list从后向前 赋值给链表结点
for (int i = list.size() - 1; i >= 0; i--) {
node.next = new ListNode(list.get(i));
node = node.next;
}
node.next = null;
return head.next.next;
}
测试代码:
public static void main(String[] args) {
ListNode node1 = new ListNode(7);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(3);
node1.next = node2;
node2.next = node3;
node3.next = node4;
ListNode nu = null;
node4.next = nu;
ListNode node11 = new ListNode(5);
ListNode node21 = new ListNode(6);
ListNode node31 = new ListNode(4);
node11.next = node21;
node21.next = node31;
ListNode nu1 = null;
node31.next = nu1;
L445AddTwoNumbersII l445 = new L445AddTwoNumbersII();
ListNode head = l445.addTwoNumbers(node11, node1);
while (head != null) {
System.out.println("~~~~~~~~~~~~");
System.out.println(head.val);
head = head.next;
}
}
【Leetcode】445. Add Two Numbers II的更多相关文章
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- 【LeetCode】002 Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- 【LeetCode】2.Add Two Numbers 链表数相加
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- 【LeetCode】2.Add Two Numbers
首先想到的是走到其中一个链表的尽头,然后把剩余的链表中的值放入写的链表,返回,但是自己写的代码好长. struct ListNode* addTwoNumbers(struct ListNode* l ...
- 【LeetCode】2. Add Two Numbers 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- [LeetCode] 445. Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- 445. Add Two Numbers II - LeetCode
Question 445. Add Two Numbers II Solution 题目大意:两个列表相加 思路:构造两个栈,两个列表的数依次入栈,再出栈的时候计算其和作为返回链表的一个节点 Java ...
- 【LeetCode】522. Longest Uncommon Subsequence II 解题报告(Python)
[LeetCode]522. Longest Uncommon Subsequence II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemin ...
- 【LeetCode】165. Compare Version Numbers 解题报告(Python)
[LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
随机推荐
- ruby on rails 环境搭建(mac or ubuntu)
环境配置前操作 mac: app_store安装x-code ubuntu: 终端->配置文件->首选项->命令->以shell方式登录 安装RVM mac: $ ruby - ...
- 20155233 2016-2017-2 《Java程序设计》第1周学习总结
20155233 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 本周主要学习教材的第一章.第二章,了解了Java的发展历程,最基本的Java环境的搭建,以及 ...
- 20155236 2016-2017-2 《Java程序设计》第一周学习总结
20155236 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 第一章:java平台概论 java SE(j2SE)分为四个主要的部分:JVM.JRE.JD ...
- js日期控件遇到的问题
一.问题: 在web项目里有很多时候需要使用日期控件来完成相关的功能,但是日期控件的日期格式又和我们的需求不符 那么,就需要我们来自定义日期的格式完成需求 二.解决: 1.取月末: (1)强制取值: ...
- c++ 全局变量
一.全局变量 声明 全局变量的定义和一般变量定义相同,不同的就是它的位置.一般会放在所有共享函数的前边. 作用 在函数间共享数据. 二.全局变量的运用 三.作业: 写出代码运行结果: ; //0 in ...
- win32api 找不到指定的模块
pywin32 安装后 import win32api 出现ImportError: DLL load failed: 找不到指定的模块 解决方法: 拷贝 C:\Python26\Lib\site-p ...
- itchat个人练习 语音与文本图灵测试例程
背景介绍 itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 官方文档参考https://itchat ...
- Linux☞权限数字表示法
权限数字表示法: 1.Linux有三种访问权限: a.可读:r(Read) b.可写:w(Write) c.可执行:x(eXcute) 2.简单说说如何去看该文件的访问权限呢?一般我们执行命令,查看目 ...
- SQL Server临时表漫谈
SQL Server是微软的关系型数据库,对于刚入门的我是一个非常友好的开发工具.可视化界面的安装与操作,非常适合刚入门的我. 其实大家要找这方面的资料,在网上一搜一大堆,这里我就不赘述那些了,基本都 ...
- python购物车优化
一.需求分析 拥有用户接口和商家接口 用户能够进行消费记录查询,充值,购物等功能,消费记录存储于数据库 商家可以进行商品的增删改等操作 二.程序流程图 程序大致流程图如下: 三.代码实现 本程序分成两 ...