题目链接

  这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(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. IO模型之三Reactor 和 Proactor IO设计模式

    反应器Reactor: 在事件驱动的应用中,应用中的请求总是通过事件(如CONNECTOR.READ.WRITE等)来表示,当多个请求同时到来时,这些请求最终还是会被序列化地处理,在序列化处理这些服务 ...

  2. bootstrap的其他

    情境文本颜色 <p class="text-muted">...</p> <p class="text-primary">. ...

  3. springcloud微服务总结三 服务客户端

    一 springcloud服务理解: dubbo中服务注册和调用都是都过注解来进行的,dubbo中在service层中调用服务是通过将@service注解改变为dubbo代码架包中的service注解 ...

  4. 如何把win10系统迁移到SSD固态硬盘

    https://jingyan.baidu.com/article/5d368d1ec59ac43f60c05733.html 我之前将两个盘都已经固定在笔记本内,迁移完之后无论怎么改还是从原来的机械 ...

  5. php 实现无限极分类

    原始数据 $array = array( array('id' => 1, 'pid' => 0, 'n' => '河北省'), array('id' => 2, 'pid' ...

  6. paraview显示指定时间段的时均图(两种方法)

    方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...

  7. hql语句加别名的错误

    写了一个查询数量的方法,结果执行不出来,debug后是runtimeException,然后就在那个hql里面使劲找,将他翻译成sql在数据库中执行,结果也没问题,原来的hql如下: 注意这个num, ...

  8. Luogu P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  9. C#中Using里使用单例的问题

    又给自己挖了一个坑跳进去. KafkaManager使用单例模型获取到一个producer,然而自己代码里用的时候加了一个using using (var producer = KafkaManage ...

  10. Java开发环境搭建——IntelliJ Idea开发环境

    IntelliJ Idea版本选择由于公司使用JDK7,所以我选择安装Version 2016.1.4(手动安装试验出来的,最新版的2016.1.4启动时提示需要安装JDK8)下载 前面说明有误,其实 ...