请看题目描述:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.


Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

//Definition for singly-linked list.
     class ListNode
{
public int val;
public ListNode next;
public ListNode(int x)
{
val = x;
}
10  } 
 分析:
  这个两数相加不难,只是两个正整数都放在了链表里面了而已。还有一点是,整数的每一位数字都是放过来存放的,那么这样就明显降低了难度了,实现起来就像我们小学的时候列树式计算两个数的和,从低位加起,和与10的余数放在本位,和与10的商产生高位进位。在本题只需从两个链表的表头开始相加,用一个存放计算结果的链表的对应位置存放两个链表对应位置的整数和进位和除以10的余数,并用临时变量存放进位,用于加入下一次的两个整数之和中。直到两个链表中长的链表也遍历完了,那么结果链表也就出来了。结果链表的整数的各位数字也是反序的。   从前面的分析来看我们可以使用递归和非递归两种算法实现。
  C#参考实现如下:  
 递归实现:
        public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
return AddTwoNumbers(l1, l2, );
}
public ListNode AddTwoNumbers(ListNode l1, ListNode l2 , int carry)
{
if(l1 == null && l2 == null && carry ==)
{
return null;
}
ListNode result = new ListNode();
int sum = (l1 == null ? : l1.val) + (l2 == null ? : l2.val) + carry;
result.val = sum % ;
ListNode more = AddTwoNumbers( l1 == null ? null : l1.next ,
l2 == null ? null :l2.next,
sum >= ? : );
result.next = more;
return result;
}
 
非递归实现:
  public ListNode AddTwoNumbers2(ListNode l1, ListNode l2)
{
ListNode node = new ListNode();
ListNode result = node; int carry = ;
while(l1 != null || l2 != null || carry != )
{
int sum =( l1 ==null ? : l1.val )+( l2 == null ? : l2.val )+ carry;
l1 =( l1 ==null ? null : l1.next);
l2 =( l2 == null ? null : l2.next); node.next = new ListNode(sum % );
node = node.next; carry = sum / ;
}
return result.next;
}
 
 总结:这个题目不难只要静下心来就可以想出来,涉及的细节问题也不多。那么如果把题目改一下,改成两个链表中存放正整数的每一位数字是正向存放的,又该如何实现呢?注意:链表是单向的。这时就要注意两个整数的位数长短了。我们可以这样实现:a)先比较两个链表的长度并用零填充较短的链表  b)递归结果加到首部
  

                            

简单的两数之和再次乱入<< Add Two Numbers >>的更多相关文章

  1. leetcode刷题--两数之和(简单)

    一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...

  2. 【Leetcode】【简单】【1. 两数之和】【JavaScript】

    题目描述 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能 ...

  3. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  4. LeetCode题解001:两数之和

    两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  5. LeetCode1——两数之和

    最近在家拧三阶魔方,把初级的玩法掌握了,也就是可以还原六个面了,速度不快,但是也很兴奋.三阶魔方的初级玩法按照套路拧就可以了,每一步需要完成的任务,该步骤转动的方法基本都是固定的,而且变化也并不是特别 ...

  6. 653. 两数之和 IV - 输入 BST + HashSet

    653. 两数之和 IV - 输入 BST 题目描述 题解分析 最简单的方法就是遍历整棵树,找出所有可能的组合,判断是否存在和为 kk 的一对节点.现在在此基础上做一些改进. 如果存在两个元素之和为 ...

  7. leetcode算法1.两数之和

    哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...

  8. LeetCode 371. Sum of Two Integers (两数之和)

    Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...

  9. [LeetCode] Two Sum IV - Input is a BST 两数之和之四 - 输入是二叉搜索树

    Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...

随机推荐

  1. sql中charindex

    假如你写过很多程序,你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中,在这篇文章中,我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.我将告诉你这两个函数是如何运转的,解 ...

  2. Nodejs 配置+基础

    Nodejs + NPP 配置. http://blog.csdn.net/foruok/article/details/48366765 NPM的全称是Node Package Manager,它就 ...

  3. C 语言字符串连接的 3种方式

    C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...

  4. 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上。解决方法

  5. Timer与TimerTask的真正原理&使用介绍

    转载: Timer与TimerTask的真正原理&使用介绍 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来 ...

  6. 解决 placeholder 垂直不居中,偏上的问题

    解决 placeholder 垂直不居中,偏上的问题 安卓浏览器显示placeholder 垂直不居中,而iphone没问题,搜了一下答案,解决方法是把input的line-height去掉就行 参考 ...

  7. jmeter 监听的介绍

    一个侦听器是一个组件,显示的结果 样本. 结果可以显示在一个树,表格,图表或简单地写入到日志中 文件. 查看的内容反应任何给定的采样器,添加的监听器” 视图 结果树 ”或“ 视图的结果表 一个测试计划 ...

  8. DOM事件流

    DOM事件标准定义了两种事件流:Capture(捕获)和Bubbing(冒泡):捕获和冒泡是javascript针对dom事件处理的先后顺序,所谓的先后顺序是指针对父标签与其嵌套子标签,如果父标签与嵌 ...

  9. 为学Linux 我看了这些书

    去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起“略懂”这两个字的.这一年里我看了很多书,细细数下,大概15本左右,其中包含了两 ...

  10. [saiku] 源码整合[maven整合]

    saiku源码的整合分为[普通web项目整合]和[maven整合]两种 本节主要是讲解如何整合为maven项目 转载自:http://blog.csdn.net/gsying1474/article/ ...