链表-Add Two Numbers

第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!)
/*struct ListNode {
int val;
struct ListNode *next;
};*/
typedef struct ListNode ListNode;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
ListNode *result = (ListNode *)malloc(sizeof(ListNode));
result->next = NULL;
ListNode *now = result;
ListNode *p1 = l1;
ListNode *p2 = l2;
int carry = ;
while(p1&&p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + p2->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p1 = p1->next;
p2 = p2->next;
}
while(p1)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p1 = p1->next;
}
while(p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p2->val + carry;
carry = r/;
p->val = r%;
now->next = p;
now = now->next;
p2 = p2->next;
}
if(carry)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
p->val = carry;
now->next = p;
now = now->next;
}
return result->next;
}
要注意返回的内容必须符合题目要求,一开始我直接返回了result,但是leetcode测试的时候会把空的头结点也输出,不符合题目要求。
要全面考虑问题,这题的特殊情况主要体现在进位部分,如999+1这种情况,还有就是两个数的位数可能会不同。
可以使用条件操作符对代码进行简化,简化版如下:
void addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
ListNode *result = (ListNode *)malloc(sizeof(ListNode));
result->next = NULL;
ListNode *now = result; ListNode *p1 = l1;
ListNode *p2 = l2;
int carry = ; while(p1&&p2)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p1->val + p2->val + carry;
carry = r/; //进位
p->val = r%;
now->next = p; //插入到result链表中
now = now->next;
p1 = p1->next;
p2 = p2->next;
} ListNode *p3 = p1?p1:p2;
while(p3)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
int r = p3->val + carry;
carry = r/; //进位
p->val = r%;
now->next = p; //插入到result链表中
now = now->next;
p3 = p3->next;
} if(carry)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->next = NULL;
p->val = carry;
now->next = p; //插入到result链表中
now = now->next;
} Print(result->next); }
【待补充C++版本。。。】
链表-Add Two Numbers的更多相关文章
- Add Two Numbers - C++链表操作
题目意思很简单,两个链表分别表示两个数,将两个数相加的结果存入一个新的链表中. 思路同样很简单:两个链表如果一样长,对应位置相加,如果某一个链表多了,则根据加的结果有无进位继续处理,全部结束后要考虑会 ...
- LeetCode 2. add two numbers && 单链表
add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...
- 链表求和12 · Add Two Numbers
反向存储,从左往右加 [抄题]: 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和.给 ...
- LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- [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 ...
- [CareerCup] 2.5 Add Two Numbers 两个数字相加
2.5 You have two numbers represented by a linked list, where each node contains a single digit. The ...
- No.002 Add Two Numbers
Add Two Numbers Total Accepted: 160702 Total Submissions: 664770 Difficulty: Medium You are given tw ...
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
随机推荐
- 从ASP.NET传递参数给水晶报表
原文 http://www.cnblogs.com/insus/p/3281114.html 上次Insus.NET有简单写了一篇文章<Visual Studio 2012使用水晶报表Cryst ...
- c++策略模式
这几天需要学习一下设计模式来为设计代码结构使得代码可扩展性强,代码更加易于维护,不用想很长时间也不知道怎么去设计一个工具的代码. 我的理解策略模式: 1.有一个策略基类,策略类是什么呢?策略类就是一个 ...
- 在magento中发邮件
1. 在system->Configuration->Store Email Addresses中设置General Contact的Sender Name.Sender Email. S ...
- 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇.我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.and ...
- C#.NET学习笔记7--11---算术运算符,变量赋值,变量的交换,布尔表达式1,布尔表达式2
C#.NET学习笔记7---算术运算符 2013/9/6 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com 1.Consol ...
- [原理][来源解析]spring于@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关联
Spring 捆绑Hibernate. 夹: 一. 1. Spring 怎样处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSe ...
- 依赖注入及AOP简述(十一)——生命周期管理 .
2. 生命周期管理 各种依赖注入框架提供了替开发者管理各种Scope的便利功能,随之而来的就必然是被管理的依赖对象的生命周期管理的问题.所谓生命周期管理,就是一个对象在它所属的Scope中从被 ...
- 一个C/C++结构体初始化有趣的现象
我们知道C语言当中结构可以使用{}进行初始化,例如有结构体定义如下: typedef struct type_t { int a; int b; int c; int d; }type_t; 我们可以 ...
- RHEL与Centos
一直在用centos,但对他的由来以及与RHEL的关系不是很明白,查些资料,小记一番. 倘若一说到Red Hat这个大名,大家似乎都听过. Qustion1:Red Hat家族中有哪些产品呢? Red ...
- 无法加载协定为“XXXWebServiceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置
错误描述:无法加载协定为“XXXWebServiceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置.请按名称指示首选的终结点配置部分. 错误原因:该webservce在web.confi ...