Leetcode:Add Two Numbers分析和实现
Add Two Numbers这个问题的意思是,提供两条链表,每条链表表示一个十进制整数,其每一位对应链表的一个结点。比如345表示为链表5->4->3。而我们需要做的就是将两条链表代表的整数加起来,并创建一个新的链表并返回,新链表代表加总值。
这个问题与算法无关,其主要是操作链表这一数据结构,以及两个大数的加法。由于没有规定链表的长度,这意味着链表代表的整数可以任意大,这样就不能先利用链表计算出对应的整数值,之后利用加总值重新生成链表。我们必须手动处理两个大数的加法。
要谨慎两个个位数的加总结果是有可能需要进位的,即7+8实际上等于10x1+5,其中1应该进位到下一个结点,而5当作这个当前结点的值。
addTwoNumbers(Node n1, Node n2)
res = Node{val = (n1.val + n2.val) % 10, next = null}
tail = res
adv = (n1.val + n2.val) / 10
n1 = n1.next
n2 = n2.next
while n1 != null && n2 != null then
sum = n1.val + n2.val + adv
tail.next = Node{val = sum % 10, next = null}
tail = tail.next
adv = sum / 10
n1 = n1.next
n2 = n2.next
Node notEndedNode = (n1 == null ? n2 : n1)
while notEndedNode != null then
sum = notEndedNode .val + adv
tail.next = Node{val = sum % 10, next = null}
tail = tail.next
adv = sum / 10
notEndedNode = notEndedNode.next
while adv != 0 then
tail.next = Node{val = adv % 10, next = null}
tail = tail.next
adv = adv / 10
return res
下面直接给出java的实现代码
package cn.dalt.leetcode; /** * Created by Administrator on 2017/6/4. */ public class AddTwoNumbers { public static void main(String[] args) { System.out.println(new AddTwoNumbers().addTwoNumbers(new ListNode(342), new ListNode(465))); } static class ListNode { ListNode(int x) { val = x % 10; int adv = x / 10; if(adv != 0) { next = new ListNode(adv); } } @Override public String toString() { return "" + val + (next != null ? "->" + next.toString() : ""); } int val; ListNode next; } static class NodeList{ ListNode tail; ListNode root; int advance = 0; public NodeList(int x) { root = new ListNode(x % 10); tail = root; advance = x / 10; } public void append(int x) { x += advance; ListNode temp = new ListNode(x % 10); advance = x / 10; tail.next = temp; tail = temp; } public ListNode getResult() { while(advance != 0) { append(0); } return root; } @Override public String toString() { return root.toString(); } } public ListNode addTwoNumbers(ListNode l1, ListNode l2) { NodeList list = new NodeList(l1.val + l2.val); l1 = l1.next; l2 = l2.next; while(l1 != null && l2 != null) { list.append(l1.val + l2.val); l1 = l1.next; l2 = l2.next; } while(l1 != null) { list.append(l1.val); l1 = l1.next; } while(l2 != null) { list.append(l2.val); l2 = l2.next; } return list.getResult(); } }
Leetcode:Add Two Numbers分析和实现的更多相关文章
- [LeetCode] Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode Add Two Numbers II
原题链接在这里:https://leetcode.com/problems/add-two-numbers-ii/ 题目: You are given two linked lists represe ...
- LeetCode: Add Two Numbers 解题报告
Add Two NumbersYou are given two linked lists representing two non-negative numbers. The digits are ...
- [LeetCode] Add Two Numbers题解
Add Two Numbers: You are given two non-empty linked lists representing two non-negative integers. Th ...
- [Leetcode] Add two numbers 两数之和
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- [LeetCode] Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode——Add Two Numbers
Question:You are given two linked lists representing two non-negative numbers. The digits are stored ...
- [LeetCode] Add Two Numbers 链表
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
随机推荐
- @InitBinder装配自定义编辑器
@InitBinder装配自定义编辑器 第一步:BaseController.java,标注@InitBinder public class BaseController { @InitBinder ...
- DDMS介绍
DDMS全称:Dalvik Debug Monitor Service 一,DDMS的作用 它提供了截屏.查看线程和堆信息.logcat.进程.广播状态信息.模拟来电呼叫和短信.虚拟地理坐标等等. 二 ...
- ZetCode PyQt4 tutorial Dialogs
#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, ...
- java MessageFormat.format 用法
FormatElement: { ArgumentIndex }:是从0开始的入参位置索引. { ArgumentIndex , FormatType } { ArgumentIndex , Form ...
- 博客网站-Hexo+GitHub+Netlify
Hexo+GitHub+Netlify一站式搭建属于自己的博客网站 https://www.cnblogs.com/kerbside/p/10130606.html https://hhongwen. ...
- 解决 The word is not correctly spelled问题
The word is not correctly spelled 此问题是eclipse校验单词拼写造成,如果出在配置文件中,一般会影响到程序的正常执行 解决方法:Window--Preferenc ...
- fusionjs 学习一 基本试用
参考demo 项目 https://github.com/rongfengliang/fusionjs-docker-demo 安装 create startkit yarn global add c ...
- mysql中distinct
1.Distinct 位置 单独的distinct只能放在开头,否则报错,语法错误,与其他函数使用时候,没有位置限制如下 Select player_id,count(distinct(task_id ...
- xmlns和xsi之schemaLocation
appplicationContex.xml文件报错:元素 "util:constant" 的前缀 "util" 未绑定 在根节点添加了“xmlns:util= ...
- 判断网络类(获取mac) InternetCheck
using System; using System.Collections.Generic; using System.Net.NetworkInformation; using System.Ru ...