题目链接

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

最新文章

  1. hasLayout &amp;&amp; Block Formatting Contexts
  2. dynamoDb aws config aws_access_key_id aws_secret_access_key golang
  3. 用触发器来实现Oracle的自增长列
  4. HDU 4717 The Moving Points (三分法)
  5. freemarker如何遍历HashMap
  6. switchomega配置
  7. python ssh弱口令爆破多线程脚本及遇到的一些错误与问题
  8. ASP.NET 实现简单的图片防盗链介绍
  9. HTML5给我们带来了什么?
  10. WinDbug抓取进程dump
  11. LeetCode201 Bitwise AND of Numbers Range Java 题解
  12. linux命令学习笔记
  13. [Django实战] 第4篇 - 用户认证(用户登录)
  14. Windows上的的神技
  15. JVM性能调优,GC
  16. day16——函数式编程和内置函数
  17. Oracle+mybatis实现对数据的简单增删改查
  18. 《HTTP协议:菜鸟入门系列》
  19. Deepin 15.4 挂载分区
  20. &quot;飞机大战&quot;游戏_Java

热门文章

  1. python实现对象&#39;+&#39;操作符
  2. Optimizing and caching browser bundles...
  3. python学习之路---day02
  4. Bound Found(思维+尺取)
  5. bzoj2212 Tree Rotations 线段树合并+动态开点
  6. HDU6396 (贪心+fread 挂)
  7. [V1-Team] WEDO创意论坛功能规格说明书
  8. opatch on-line patch and standby-fisrt patch
  9. Mina初识
  10. 客户端与服务器cookie