自从前天做这道题做到半夜,直到今天上午我都没有碰它……
适当的放弃不是失败,而是为了更好的开始。
题目要求
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 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;
}
};