《LeetBook》LeetCode题解(2):Add Two Numbers [M]
我现在在做一个叫《leetbook》的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看
书的地址:https://hk029.gitbooks.io/leetbook/
`
2.Add Two Numbers [M]
题目
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->
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//异常判断
if(l1 == NULL && l2 == NULL)
return NULL;
if(l1 == NULL)
return l2;
if(l2 == NULL)
return l1;
//初始化
ListNode * result = new ListNode((l1->val + l2->val)%10);
int carry = (l1->val + l2->val)/10; //表示进位
ListNode* templ1 = l1;
ListNode* templ2 = l2;
ListNode* tempresult = result;
//这里弄一个结束节点,有利于当一个节点到结尾后做操作
ListNode* EndNode = new ListNode(0);
while(templ1->next != NULL || templ2->next != NULL)
{
//如果某个链表已经到结尾了,那么就把它变成EndNode,特点是值为0,next = NULL
if(templ1->next == NULL)
templ1 = EndNode;
else
templ1 = templ1->next;
if(templ2->next == NULL)
templ2 = EndNode;
else
templ2 = templ2->next;
tempresult->next = new ListNode((templ1->val + templ2->val + carry)%10);
carry = (templ1->val + templ2->val + carry)/10;
tempresult = tempresult->next;
}
if(carry == 1)
tempresult->next = new ListNode(1);
return result;
}
};
更精巧的代码
不得不说,potpie的代码比我上面的代码精简了不少,我上面的代码考虑的太多了,因为我通式用的templ1->val + templ2->val + carry,导致每次需要对先结束的链表进行尾部填充,而且开头多了很多额外的代码。
他的代码,2个链表是独立操作的,而且代码写的很精简,基本没废话!赞
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode c1 = l1;
ListNode c2 = l2;
ListNode sentinel = new ListNode(0);
ListNode d = sentinel;
int sum = 0;
while (c1 != null || c2 != null) {
sum /= 10;
if (c1 != null) {
sum += c1.val;
c1 = c1.next;
}
if (c2 != null) {
sum += c2.val;
c2 = c2.next;
}
d.next = new ListNode(sum % 10);
d = d.next;
}
if (sum / 10 == 1)
d.next = new ListNode(1);
return sentinel.next;
}
}
《LeetBook》LeetCode题解(2):Add Two Numbers [M]的更多相关文章
- leetcode题解2. Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- LeetCode题解 #2 Add Two Numbers
题目大意:使用链表表示的两个整数,计算出其和,以同样的形式返回. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 ...
- LeetCode 题解之Add Two Numbers II
1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Lis ...
- LeetCode题解之Add two numbers
1.题目描述 2.题目描述 题目思路可以参考合并单链表的思路,定义一个全局 进位标志,如果两个数值相加得到需要进位,则将进位标志置为1 . 3.代码 ListNode* addTwoNumbers(L ...
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- C# 写 LeetCode Medium #2 Add Two Numbers
2. Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. ...
- LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...
随机推荐
- 组队作业_One
Part 1.前言 结对项目作业 结对同学高裕翔的博客 本博文pdf版本 Part 2.PSP表 PSP3.1 Personal Software Process Stages 预估耗时(分钟) 实际 ...
- [leetcode] 8. Maximum Depth of Binary Tree
可能是因为我是按难度顺序刷的原因,这个其实在之前的几道题里面已经写过了.题目如下: Given a binary tree, find its maximum depth. The maximum d ...
- 浅议Github的注册和使用
Self-introduction:编者本人叫司明周,现就读于南通大学计算机学院网络工程142班.爱好数学和音乐,喜欢数学中的逻辑性和天马行空的思维 编程能力:可以跳过略过得过且过吗..好吧,面对现实 ...
- sitecore 缓存管理器
namespace XXX.Shared.Infrastructure.Caching { using System; using System.Collections.Generic; using ...
- 利用InfoPath实现SharePoint Server 2013列表的级联选择(Cascading Drop Down List)
最近在利用SharePoint Server 2013的列表组织和存储数据,发现SharePoint列表原始不支持级联选择的功能. 谷歌百度一通以后,发现了很多通过代码实现的方案,利用第三方的插件sp ...
- SQL Union 和Union All 的区别
Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...
- sql server还原到指定时间
BACKUP LOG yjxy_1010 TO DISK='d:\yixy_log.bak' WITH FORMAT 数据库右击->任务->还原->还原事务日志.
- Schema validation found non-datatype errors
Private Sub UpdateClaim(ByVal Status As String, ByVal Request As String) '======================' Im ...
- 赛肯德 | 2017NEERC某题
我们枚举每一条边的流量x,将它作为底流(也就是比它大的的流量变成差值,比它小的流量为0),然后我们设x就是路径上第K大的那个边的流量.然后跑最短路,加上dis[n]就是当前的答案.然后取min即可. ...
- Exp2 后门原理与实践 20164323段钊阳
220164323 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式?在使用盗版软件,盗版系统,甚至游戏外挂时,往往会让我们关闭杀毒软件,.(2)例举你知道的后门如何启动 ...