add-two-numbers-ii
注意:有一种好的方法,是将链表倒转,然后依次相加。
但是,按照题目要求,用了不改变原链表的方法。
就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位。
https://leetcode.com/problems/add-two-numbers-ii/
- package com.company;
- import java.util.*;
- class ListNode {
- int val;
- ListNode next;
- ListNode(int x) { val = x; }
- }
- class Solution {
- ListNode addTwo(ListNode l1, ListNode l2) {
- //System.out.printf("add two %d, %d \n", l1.val, l2.val);
- ListNode ret = new ListNode(l1.val + l2.val);
- if (l1.next != null && l2.next != null) {
- ret.next = addTwo(l1.next, l2.next);
- ret.val += ret.next.val / 10;
- ret.next.val = ret.next.val % 10;
- }
- else {
- ret.next = null;
- }
- return ret;
- }
- public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
- int l1len = 0;
- ListNode ln = l1;
- while (ln != null) {
- l1len++;
- ln = ln.next;
- }
- int l2len = 0;
- ln = l2;
- while (ln != null) {
- l2len++;
- ln = ln.next;
- }
- if (l1len < l2len) {
- ln = l1;
- l1 = l2;
- l2 = ln;
- l1len = l1len ^ l2len;
- l2len = l1len ^ l2len;
- l1len = l1len ^ l2len;
- }
- for (int i=0; i<l1len-l2len; i++) {
- ln = new ListNode(0);
- ln.next = l2;
- l2 = ln;
- }
- ln = addTwo(l1, l2);
- if (ln.val >= 10) {
- ListNode newHead = new ListNode(ln.val / 10);
- ln.val = ln.val % 10;
- newHead.next = ln;
- ln = newHead;
- }
- return ln;
- }
- }
- public class Main {
- public static void main(String[] args) {
- System.out.println("Hello!");
- Solution solution = new Solution();
- ListNode l1 = new ListNode(7);
- ListNode l11 = new ListNode(2);
- ListNode l12 = new ListNode(4);
- ListNode l13 = new ListNode(3);
- l1.next = l11;
- l11.next = l12;
- l12.next = l13;
- ListNode l2 = new ListNode(5);
- ListNode l21 = new ListNode(6);
- ListNode l22 = new ListNode(4);
- l2.next = l21;
- l21.next = l22;
- ListNode ret = solution.addTwoNumbers(l1, l2);
- System.out.printf("Get ret: \n");
- while (ret != null) {
- System.out.printf("%d", ret.val);
- ret = ret.next;
- }
- System.out.println();
- /*Iterator<List<Integer>> iterator = ret.iterator();
- while (iterator.hasNext()) {
- Iterator iter = iterator.next().iterator();
- while (iter.hasNext()) {
- System.out.printf("%d,", iter.next());
- }
- System.out.println();
- }*/
- System.out.println();
- }
- }
add-two-numbers-ii的更多相关文章
- [LeetCode] 445. Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- LeetCode 445. 两数相加 II(Add Two Numbers II)
445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...
- 445. Add Two Numbers II - LeetCode
Question 445. Add Two Numbers II Solution 题目大意:两个列表相加 思路:构造两个栈,两个列表的数依次入栈,再出栈的时候计算其和作为返回链表的一个节点 Java ...
- LeetCode 445 Add Two Numbers II
445-Add Two Numbers II You are given two linked lists representing two non-negative numbers. The mos ...
- [LeetCode] Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- LeetCode Add Two Numbers II
原题链接在这里:https://leetcode.com/problems/add-two-numbers-ii/ 题目: You are given two linked lists represe ...
- 【LeetCode445】 Add Two Numbers II★★
题目描述: 解题思路: 给定两个链表(代表两个非负数),数字的各位以正序存储,将两个代表数字的链表想加获得一个新的链表(代表两数之和). 如(7->2->4->3)(7243) + ...
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- [Swift]LeetCode445. 两数相加 II | Add Two Numbers II
You are given two non-empty linked lists representing two non-negative integers. The most significan ...
随机推荐
- hash --C++
题目来源:code[VS] 这是一个极其无聊的hash题.... 1230 元素查找 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出 ...
- java collections
http://www.docjar.com/docs/api/java/util/technotes/guides/collections/changes4.html http://www.docja ...
- 对cnblogs.com用户体验的评价
一.对于cnblogs.com的用户体验我们先对以下问题进行回答: 1.你是什么样的用户, 有什么样的心理, 对cnblogs 的期望值是什么? 我们是正在学习软件工程课程的在校计算机专业大学生,在博 ...
- android聊天,存储聊天记录sqlite
项目中有聊天模块,需要用到打开activity的时候初始化聊天记录的情况.大致情况如下: 辅助类:ChatSQLiteHelper 在第一次时会调用oncreate方法(判断的标准是schedul ...
- [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化
重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数) 1.概述 图像二值化是图像处理中的一项基本技术,也 ...
- android studio 智能提示忽略大小写
Step1: Step2:
- 2391: Cirno的忧郁 - BZOJ
Description Cirno闲着无事的时候喜欢冰冻青蛙.Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻.雾之湖生活着m只 ...
- IntelliJ IDEA 调试小记
一.IntelliJ IDEA 调试没有F6 Eclipse调试有F6,意为下一步,递增F8.可IntelliJ IDEA 调试没有这个. 二.图解 Step Over (F8): 下一步 (相当于E ...
- 解决Ubuntu开机自动挂载硬盘回收站不可用等权限问题
1.修改fstab sudo gedit /etc/fstab 2.添加如下代码 #Entry for /dev/sdb7 : UUID=78A675EB46D703C4 /media/anseey/ ...
- 20160725noip模拟赛“Paodekuai” alexandrali
T1: 我们可以用火柴棒来表示十进制下的0~9, 如图所示 现给定火柴数n, 问用这n根火柴能组成的最小数和最大数分别是多少. 所有火柴必须全部用完, 并且所有数字必须是正的且不含前缀零. [解题] ...