题目链接

  这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作)。

class ListNode{
int val;
ListNode next;
ListNode(int x){
val = x;
}
}
//在使用之前ListNode得next变量前需要进行初始化:
ListNode node = new ListNode(1);
a = node.next;
a = new ListNode(2);
//上面是不能通过node找到刚刚初始化的a, 只有通过下面这种方式才能找到next,形成一条链
node.next = new ListNode(3);
a = node.next; //此时对a操作才能,才能形成对一条链的操作

  以前我认为归并需要分成3部分,while()直到node1和node2其中一个为空,然后再while()非空的那个node,但是不同场景应用方式也不同,如果遇到归并相加问题,就不用那么麻烦,代码对比一下就知道了。

public class Solution {

    public static void main(String[] args) {
int[] data1 = new int[] {1};
int[] data2 = new int[] {9,9};
ListNode node1 = new ListNode(data1[0]);
ListNode node2 = new ListNode(data2[0]);
ListNode tmp = node1;
for(int i = 1; i < data1.length; i ++) {
tmp.next = new ListNode(data1[i]);
tmp = tmp.next;
}
tmp = node2;
for(int i = 1; i < data2.length; i ++) {
tmp.next = new ListNode(data2[i]);
tmp = tmp.next;
}
Solution s = new Solution();
tmp = s.addTwoNumbers(node1, node2);
while(tmp != null) {
System.out.format("%d ", tmp.val);
tmp = tmp.next;
}
} public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode cur_node = head;
int carry = 0;
while(l1 != null || l2 != null) {
int x = (l1 == null) ? 0 : l1.val;
int y = (l2 == null) ? 0 : l2.val;
int val = x + y + carry;
carry = val / 10;
cur_node.next = new ListNode(val % 10);
cur_node = cur_node.next;
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry > 0) {
cur_node.next = new ListNode(1);
}
return head.next;
} private class HelpMergeReturn{
int flag;
ListNode node;
HelpMergeReturn(int f, ListNode n){
flag = f;
node = n;
}
} private HelpMergeReturn helpMerge(ListNode node, ListNode l, int flag) {
while(l != null) {
int val = l.val + flag;
flag = val / 10;
node.next = new ListNode(val % 10);
node = node.next;
l = l.next;
}
return new HelpMergeReturn(flag, node);
} public ListNode addTwoNumbers1(ListNode l1, ListNode l2) {
int flag = 0;
ListNode result = null;
ListNode tmp_node = null;
while(true) {
if(l1 == null || l2 == null)
break;
int val = l1.val + l2.val + flag;
flag = val / 10;
if(tmp_node == null) {
tmp_node = new ListNode(val % 10);
result = tmp_node;
}
else {
tmp_node.next = new ListNode(val % 10);
tmp_node = tmp_node.next;
}
l1 = l1.next;
l2 = l2.next;
}
HelpMergeReturn hm = null;
if(l1 != null) {
hm = helpMerge(tmp_node, l1, flag);
}
if(l2 != null) {
hm = helpMerge(tmp_node, l2, flag);
}
if(hm != null) {
tmp_node = hm.node;
flag = hm.flag;
}
if(flag != 0) {
tmp_node.next = new ListNode(flag);
}
return result;
}
}

LeetCode刷题系列——Add Two Numbers的更多相关文章

  1. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  2. 【LeetCode刷题系列 - 002题】Add Two Numbers

    题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  3. LeetCode第二题:Add Two Numbers

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  4. 刷题2. Add Two Numbers

    一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...

  5. LeetCode刷题笔录Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  6. 【LeetCode刷题系列 - 003题】Longest Substring Without Repeating Characters

    题目: Given a string, find the length of the longest substring without repeating characters. Example 1 ...

  7. leetcode刷题系列(一) 26题 删除排序数组中的重复项

    题干 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

  8. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  9. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

随机推荐

  1. springboot整合mybatis,redis,代码(二)

    一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...

  2. Servlet记录

    [Servlet]java语言编写动态资源的开发技术,普通的java类 [转发与重定向的区别] 转发在服务器端完成的:重定向是在客户端完成的 转发的速度快:重定向速度慢 转发的是同一次请求:重定向是两 ...

  3. Android File文件存储功能

    1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...

  4. 004 Android XML文件常用五大页面布局方式

    1.线性布局(LinearLayout)最常用 <1>使用线性布局,首先在xml文件中修改布局为LinearLayout 修改完成后,可在Component Tree中看见如下内容: &l ...

  5. C++_类继承1-从一个简单的类开始

    面向对象编程的主要目的之一是:提供可重用的代码.尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多. C++提供了更高层次的重用性.其中之一就是继承这个概念. 一些厂商提供了类库.类库由类 ...

  6. 【算法笔记】B1014 福尔摩斯的约会

    1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  7. 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

    参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

  8. 使用Maven运行Java main的3种方式使用Maven运行Java main的3种方式

    maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成 ...

  9. 微信小程序实现图片上传功能

    前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...

  10. Spark遇到的报错和坑

    1. Java版本不一致,导致启动报错. # 解决方法: 在启动脚本最前边添加系统参数,指定Java版本 export JAVA_HOME=/usr/java/jdk1..0_181-amd64/jr ...