两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法思路和官方相同,但就语句而言或许可以进一步优化
关键代码:

            ListNode result= new ListNode();      //当前节点,进行迭代
ListNode head = result; //头节点
int next = ; //若相加大于10进位则next==1
while (l1 != null || l2 != null)
{
int value1, value2;
if (l1 == null) //当l1或l2为空时,假设值为0
value1 = ;
else
value1 = l1.val;
if (l2 == null)
value2 = ;
else
value2 = l2.val;
int temp = value1 + value2;
result.val = temp + next;
if (result.val < ) //判断是否进位
{
next = ;
}
else
{
result.val = result.val - ;
next = ;
}
if (l1 != null) //l1和l2不为空时迭代
l1 = l1.next;
if (l2 != null)
l2 = l2.next;
if (l1 == null && l2 == null) //同时为空时结束,避免下方语句进行使得结果错误
break;
result.next = new ListNode();
result = result.next;
}
if (next == ) //出现进位但l1和l2下一数字都为0时上述循环无法进行,做特殊处理
{
result.next = new ListNode();
}
return head;

完整代码:

using System;
namespace numAdd
{
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}
class Program
{
public static ListNode AddTwonumbers(ListNode l1, ListNode l2)
{
ListNode result= new ListNode(); //当前节点,进行迭代
ListNode head = result; //头节点
int next = ; //若相加大于10进位则next==1
while (l1 != null || l2 != null)
{
int value1, value2;
if (l1 == null) //当l1或l2为空时,假设值为0
value1 = ;
else
value1 = l1.val;
if (l2 == null)
value2 = ;
else
value2 = l2.val;
int temp = value1 + value2;
result.val = temp + next;
if (result.val < ) //判断是否进位
{
next = ;
}
else
{
result.val = result.val - ;
next = ;
}
if (l1 != null) //l1和l2不为空时迭代
l1 = l1.next;
if (l2 != null)
l2 = l2.next;
if (l1 == null && l2 == null) //同时为空时结束,避免下方语句进行使得结果错误
break;
result.next = new ListNode();
result = result.next;
}
if (next == ) //出现进位但l1和l2下一数字都为0时上述循环无法进行,做特殊处理
{
result.next = new ListNode();
}
return head;
}
static void Main(string[] args) //简单测试
{
ListNode l1 = new ListNode();
l1.next = new ListNode();
//l1.next.next = new ListNode(3); ListNode l2 = new ListNode();
//l1.next = new ListNode(6);
//l1.next.next = new ListNode(4); ListNode l3 = AddTwonumbers(l1, l2);
while (l3 != null)
{
Console.WriteLine(l3.val);
l3 = l3.next;
}
}
}
}

算法

从最低一位开始相加,大于9则进位处理,直至到最后处理完成

以下特别情况要特别注意:

测试用例 说明
l1=[0,1],l2=[0,1,2]l2=[0,1,2] 当一个列表比另一个列表长时
l1=[],l2=[0,1]l2=[0,1] 当一个列表为空时,即出现空列表
l1=[9,9],l2=[1]l2=[1] 求和运算最后可能出现额外的进位,这一点很容易被遗忘

两数相加(C#数据结构和算法练习)的更多相关文章

  1. LeetCode :2.两数相加 解题报告及算法优化思路

    题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...

  2. Leetcode算法系列(链表)之两数相加

    Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...

  3. 【leetcode】 算法题2 两数相加

      问题      给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

  4. day2——两数相加

    // 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法题干//给定两个非空链表来表示两个非负整数.位数按照逆序方式存储, ...

  5. [CareerCup] 18.1 Add Two Numbers 两数相加

    18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. 这道题让我 ...

  6. ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  7. Leetcode(二)两数相加

    两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...

  8. 两数之和,两数相加(leetcode)

    我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...

  9. LeetCode(2):Add Two Numbers 两数相加

    Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...

随机推荐

  1. CAS 集群部署

    业务场景 单点登录服务器如果压力过大的情况,那么可以使用集群分担压力,但是cas 默认不支持session同步. 所以可以需要做session同步,可以使用j2cache 实现session同步.另外 ...

  2. 为DS5添加新的gcc工具链

    环境: 步骤: 1.下载mingw32版本的工具链 下面有两个下载工具链的网站: ARM官网的: https://developer.arm.com/tools-and-software/open-s ...

  3. django 基础1

    1.web应用 本质是基于socket实现的应用程序 浏览器---------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态 请求协议 浏览器--- ...

  4. LoadRunner开发http协议接口之form表单脚本

    loadrunner传form表单,用web_submit_data函数. Action() { // lr_start_transaction("hp_homepage"); / ...

  5. 【大数据】0002---MongoDB集群自动分离创建新集群

    场景:MongoDB集群运行后,自动产生新的集群 解答:可能没有理解问题,理清思路如下 1.日志分析 2.配置文件检查(日期.版本) 3.网络IP变化 4.github 5.stack overflo ...

  6. JS常用关键字总结

    in: 案例1.遍历对象: for(key in obj) { console.info( key+":"+obj[key]; ) }; 案例2.判断对象中是否有属性: " ...

  7. Anaconda3(2)Anaconda3中安装TensorFlow

    https://zhuanlan.zhihu.com/p/34730661 1. 安装anaconda3:自行下载.安装[注意版本] (可参考引用链接) 2. 搭建TensorFlow环境 cuda1 ...

  8. 链接指示:extren"C"

    C++程序有时需要调用其他语言编写的函数,最常见的是调用C语言编写的函数.像所有其他名字一样,其他语言中的函数名字也必须在C++中进行声明,并且该声明必须指定返回类型和形参列表.对于其他语言编写的函数 ...

  9. 【Gamma】“北航社团帮”展示博客

    目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...

  10. express框架,使用 static 访问 public 内静态文件

    使用 express 生成 node 服务器后,我们需要访问放在public文件夹内的静态文件,如上传的图片 我们需要在app.js中添加配置项: app.use('/public',express. ...