LeetCode刷题系列——Add Two Numbers
这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(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的更多相关文章
- LeetCode刷题系列
LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...
- 【LeetCode刷题系列 - 002题】Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- LeetCode第二题:Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
- 刷题2. Add Two Numbers
一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...
- LeetCode刷题笔录Add Binary
Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...
- 【LeetCode刷题系列 - 003题】Longest Substring Without Repeating Characters
题目: Given a string, find the length of the longest substring without repeating characters. Example 1 ...
- leetcode刷题系列(一) 26题 删除排序数组中的重复项
题干 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
随机推荐
- C++_异常1-调用abort()
异常是相对较新的C++功能,有些老式编译器可能没有实现.另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它. 这里先讨论一个基本问题: 2.0 * x * y / (x+y) 如果y是x的 ...
- HihoCoder - 1142 三分法练手
中文题面,原函数为三峰函数,先折半再三分 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+11; con ...
- 使用PHP并发执行任务–curl_multi应用
使用PHP并发执行任务–curl_multi应用 原网址:http://lampblog.org/category/phpdev
- 豆瓣模拟登录(双层html)
一.豆瓣模拟登录(双层html) #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import time from selenium ...
- Spring整合AspectJ的AOP
学而时习之,不亦说乎! --<论语> 看这一篇之前最好先看前面关于AOP的两篇. http://www.cnblogs.com/z ...
- C#数组 动态添加元素
string[] a = new string[] { "1", "2", "3" }; 给a追加一个 "4" 1 2 ...
- Ionic3,懒加载(二)
Ionic懒加载: 普通的ionic项目中,创建好每一个Component页面后,都需要在app.module.ts中进行declaration(声明)后才能进行调用,而这样的声明方式,及在APP加载 ...
- DNS服务器设置
1,域名解析:ip能够访问,但是域名不能访问. 2,配置好网络之后,切换到命令行模式,配置好的网络便不能用了. 具体方法: 打开vim /etc/sysconfig/network-scripts/i ...
- HTML练习 | 百度搜索框
<!DOCTYPE html> <head> <title>百度首页</title> <style> .logo{ background:u ...
- 案例43-crm练习获取客户列表使用struts2
1 src下配置文件 1 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...