题目链接

  这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(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. mysql 面试题

    1.一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?   2.Mysql的技术特 ...

  2. docker大概理解

    #是啥# 轻量级的虚拟机,占用资源远小于一般意义上的虚拟机(例如:vmware,hyper-v) #特点# 启动快,体积小,开销少 #本质# Linux容器的一种封装 参考: 阮一峰博客 http:/ ...

  3. wepsocket 了解一下

    WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...

  4. hdu1286 找新朋友 欧拉函数模板

    首先这一题用的是欧拉函数!!函数!!不是什么欧拉公式!! 欧拉函数求的就是题目要求的数. 关于欧拉函数的模板网上百度一下到处都是,原理也容易找,这里要介绍一下另一个强势模板. 在这一题的讨论里看到的. ...

  5. centos 7 查看系统版本信息

    2018-11-06 1. 查看版本号  CentOS的版本号信息一般存放在配置文件当中,在CentOS中,与其版本相关的配置文件中都有centos关键字,该文件一般存放在/etc/目录下,所以说我们 ...

  6. Redis主从、哨兵、集群的简单区别

    2018-10-26 主从:读写分离,备份哨兵:监控,自动转移,选主集群:数据 hash 分片,同时包含主从及哨兵特性

  7. TCP/IP协议分为哪四层,具体作用是什么。

    TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远 ...

  8. sourceTree免登陆

    https://www.cnblogs.com/dereckbu/articles/7659674.html

  9. elasticSearch请求流程图

  10. C#(Winform)的Show()和ShowDialog()方法

    1. 显示窗口的两种方式: Winform中的Form,在显示窗口时,可以使用Show()和ShowDialog()两种方式 2. 非模态窗口方式(可以跟其他界面自由切换,而且不阻塞代码) Show( ...