题目 面试题 02.05. 链表求和
解题思路
由于两个加数在链表中是反向存储的,所以处理起来比较简单,模拟一下加法的过程,依次将链表中的数字相加。需要注意的点在于进位的处理,单独设置一个整型用于存储当前的进位即可。c++代码如下:
class Solution {//反向存放时的解法:模拟
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(!l1&&!l2) return NULL;
else if(!l2) return l1;
else if(!l1) return l2;
ListNode* Prehead=new ListNode(0);//设置头结点
ListNode* head=Prehead;
ListNode *p1=l1,*p2=l2;
int flag=0;//保存进位
while(p1||p2)
{
int sum;
if(p1==NULL){
sum=p2->val+flag;
p2=p2->next;
}
else if(p2==NULL){
sum=p1->val+flag;
p1=p1->next;
}
else{
sum=p1->val+p2->val+flag;
p1=p1->next;
p2=p2->next;
}
flag=sum/10;
sum=sum%10;
ListNode *node=new ListNode(sum);//将当前位置的和用节点的形式存储起来,然后用当前指针指向该节点即可
head->next=node;
head=head->next;
}
if(flag>0)
{
ListNode* node=new ListNode(flag);
head->next=node;
}
return Prehead->next;
}
};