您的位置:首页 > 编程语言

LintCode【简单】167. 链表求和 。代码及思路

2018-01-24 18:08 459 查看
自从前天做这道题做到半夜,直到今天上午我都没有碰它……

适当的放弃不是失败,而是为了更好的开始。

题目要求

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中
相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

您在真实的面试中是否遇到过这个题? 

Yes

样例

给出两个链表 
3->1->5->null
 和 
5->9->2->null
,返回 
8->0->8->null


思路
一开始我以为这不就是一个简单的加法进位嘛……但是后来用指针还出了错误

Segmentation fault(core dumped)

我是因为增加下一位的时候没有判断next的指针是否是空,还是要慎重用指针啊!

还有一个感想就是,一定要确保自己思路清晰的情况下再提交代码,不然像我一样稀里糊涂就提交40多遍的话拉低平均提交次数心疼啊QAQ

下面是代码,自我感觉还比较简洁……

class Solution {
public:
/*
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
ListNode * addLists(ListNode * l1, ListNode * l2) {
// write your code here
ListNode *p = l1;
ListNode *p1 = l1;
ListNode *q = l2;
while(p != NULL){
if(q != NULL){
if(p->val + q->val >= 10){
p->val = (p->val + q->val) % 10;
if(p->next != NULL){
p->next->val++;
}
else{
p->next = new ListNode;
p->next->val = 1;
}
}
else{
p->val += q->val;
}
}
else{
//q结束的时候判断一下p是不是>=10
if(p->val >= 10){
p->val = p->val % 10;
if(p->next != NULL){
p->next->val++;
}
else{
p->next = new ListNode;
p->next->val = 1;
}
}
break;
}
q = q->next;
p1 = p;
p = p->next;
}
if(q != NULL){
p1->next = q;
}
return l1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: