题目 :
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
说实话,一开始我没看懂什么意思,后来想了半天才明白,这道题不难,我一开始写了个死循环,忘了l1=l1->next,l2=l2->next;,导致爆内存,后来修改后,发现边界没处理好,
即当l1走完后,如何处理,此题的难度还是在进位上,其他的倒没什么,不过如此低的通过率,我3遍a掉还是挺高兴的,
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
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 *head=new ListNode;
ListNode *dummy=head;
int a,b=0;
while(l1!=NULL&&l2!=NULL)
{ a=l1->val+l2->val+b;
if(a>=10)
{a=a%10;b=1;}
else {b=0;}
ListNode *p=new ListNode;
p->val=a;
l1=l1->next;
l2=l2->next;
head->next=p;
head=p;
}
if(l1==NULL&&l2!=NULL)
{ head->next=l2;
while(l2!=NULL)
{ a=l2->val+b;
if(a>=10)
{a=a%10;b=1;}
else {b=0;}
l2->val=a;
l2=l2->next;
}
}
if(l1!=NULL&&l2==NULL)
{ head->next=l1;
while(l1!=NULL)
{ a=l1->val+b;
if(a>=10)
{a=a%10;b=1;}
else {b=0;}
l1->val=a;
l1=l1->next;
}
}
if(l1==NULL&&l2==NULL&&b==1)
{ ListNode *p=new ListNode;
p->val=b;
head->next=p;
}
return dummy->next;
}
};
感想:这道题我做的挺顺利的,感想还是没有的。很正常的思路,没有奇特之处。