[LeetCode] Add Two Numbers题解
You are given two non-empty linked lists representing two non-negative integers. 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.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
这是LeetCode中标记为Medium的一道题。其实这道题的思路非常简单,两个链表中每个对应节点的值相加作为第三个链表对应节点的值,考虑进位即可。但是因为太久没有做链表的题,做题的时候遇到了一些陷阱,并且最后Accepted的代码有四十行。看到Discussion中有人只用了十几行就解决了问题,非常钦佩(同时非常赧然)。
以下是两份代码的对比:
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode re(0), *p = &re;
int carry = 0;
while(l1 || l2 || carry){
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) +carry;
carry = sum / 10;
p->next = new ListNode(sum % 10);
p = p->next;
l1 ? l1 = l1->next : l1;
l2 ? l2 = l2->next : l2;
}
return re.next;
}
};
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int a = 0,b = 0,carry = 0;//ab是用来记录两个链表的长度的,carry是进位
int ta = 0,tb = 0,tc = 0;//ta、tb是两个链表里头的一个数,tc是他们之和
ListNode* temp1 = l1;
ListNode* temp2 = l2;
ListNode* p = new ListNode(0);
ListNode* re= p;
while(temp1 != NULL){
a ++;
temp1 = temp1->next;
}
while(temp2 != NULL){
b ++;
temp2 = temp2->next;
}
int max = a > b? a : b;
for(int i = 0; i < max; i++){
ta = tc = tb = 0;
if(l1 != NULL){
ta = l1->val;
l1 = l1->next;
}
if(l2 != NULL){
tb = l2->val;
l2 = l2->next;
}
tc = (carry + ta + tb) % 10;
carry = (carry + ta + tb) / 10;//进位
p->next = new ListNode(tc);
p = p->next;
}
//可能最后有进位,所以再执行一次
if(ta+tb+carry>9){
p->next = new ListNode(1);
p = p->next;
}
return re->next;
}
};
做题中犯的错误
最初的指针用的是这种写法
ListNode *p;
ListNode *re= p;
...
p = new ListNode(tc);
p = p->next;
...
return re;
最后发现每次返回的re都是NULL。其实是因为自己犯了很傻的错误,虽然初始化时将指针p赋值给指针re,看起来好像re和p相等了,但是指针p执行了一次new ListNode之后指向了别的地址,所以指针re和p是不等的,这时候返回re当然就是空值了。
而后来的写法,由于p和re初始化指向一个node实例,并且执行new操作的是p->next,所以不会出现这种问题。
引以为鉴啊!
[LeetCode] Add Two Numbers题解的更多相关文章
- LeetCode Add Two Numbers II
原题链接在这里:https://leetcode.com/problems/add-two-numbers-ii/ 题目: You are given two linked lists represe ...
- [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 解题报告
Add Two NumbersYou are given two linked lists representing two non-negative numbers. The digits are ...
- Leetcode:Add Two Numbers分析和实现
Add Two Numbers这个问题的意思是,提供两条链表,每条链表表示一个十进制整数,其每一位对应链表的一个结点.比如345表示为链表5->4->3.而我们需要做的就是将两条链表代表的 ...
- [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 ...
随机推荐
- 《快学Scala》第一章 基础
- WiFi安全那些事儿,整理推荐~
即使你安装了防火墙,不连接任何WIFI和热点,不在任何不受信任的网站下载东西,及时清理缓存和个人敏感信息,你相信吗?你的个人隐私仍然可能被泄露出去! 基础篇: 推荐1 谁出卖了你 << ...
- form表单元素的值序列化成对象
/** * 将form表单元素的值序列化成对象 * param: form jquery form对象 */ var serializeObject = function(form) { var o ...
- 10分钟教你用Python打造微信天气预报机器人
01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...
- mysql导入大批量数据出现MySQL server has gone away的解决方法
因工作需要,需要导入一个200M左右的sql到user库 执行命令 mysql> use user Database changed mysql> source /tmp/user.sql ...
- USACO The Lazy Cow
题目描述 这是一个炎热的夏天,奶牛贝茜感觉到相当的疲倦而且她也特别懒惰.她要在她的领域中找到一个合适的位置吃草,让她能吃到尽可能多的美味草并且尽量只在很短的距离.奶牛贝茜居住的领域是一个 N×N 的矩 ...
- WebGIS简单实现一个区域炫酷的3D立体地图效果
1.别人的效果 作为一个GIS专业的,做一个高大上的GIS系统一直是我的梦想,虽然至今为止还没有做出一个理想中的系统,但是偶尔看看别人做的,学习下别人的技术还是很有必要的.眼睛是最容易误导我们的,有时 ...
- VS2015 MSVCRTD.lib(_chandler4gs_.obj) : error LNK2019: unresolved external symbol __except_handler4_common referenced in function __except_handler4
今天在VS2015中用编译好的QT5静态库打包软件,配置好QT的静态环境后, 发现报MSVCRTD.lib(_chandler4gs_.obj) : error LNK2019: unresolved ...
- js处理json数据,java处理json数据
一.js处理json数据 处理办法之一是把本机json数据或远程返回json数据用eval函数,使之变成DOM对象. 例如: var people = { "programmers" ...
- 师傅领进门之6步教你跑通一个AI程序!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 源码下载地址请点击原文查看. 初学机器学习,写篇文章mark一下,希望能为将入坑者解点惑.本文介绍一些机 ...