写完感觉其实也不难,就是写题中总有一些没有考虑的地方。以及LeetCode对指针的要求很严格,不能存在空指针,必须先指向NULL,不然就会出现报错。虽然LeetCode不充值会员不能调试,但是可以通过把想要输出的数据存入最终输出的数据输出来调试数据。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int temp1[100],temp2[100],result[100],i,i1,i2,j1,j2,temp,k;
i1=i2=0;
while(l1!=NULL||l2!=NULL){
if(l1!=NULL){
temp1[i1++]=l1->val;
l1=l1->next;
}
if(l2!=NULL){
temp2[i2++]=l2->val;
l2=l2->next;
}
}
j1=j2=0;
temp=k=0;
while(j1<i1&&j2<i2){
if(temp1[j1]+temp2[j2]+temp<10){
result[k++]=temp1[j1++]+temp2[j2++]+temp;
temp=0;
}
else{
result[k++]=(temp1[j1]+temp2[j2]+temp)%10;
temp=(temp1[j1++]+temp2[j2++]+temp)/10;
}
}
//l2长度大于l1
while(j2<i2){
if(j2>=i2)
break;
if(temp2[j2]+temp<10){
result[k++]=temp2[j2++]+temp;
temp=0;
}
else{
result[k++]=(temp2[j2]+temp)%10;
temp=(temp2[j2++]+temp)/10;
}
}
//l1长度大于l2
while(j1<i1){
if(j1>=i1)
break;
if(temp1[j1]+temp<10){
result[k++]=temp1[j1++]+temp;
temp=0;
}
else{
result[k++]=(temp1[j1]+temp)%10;
temp=(temp1[j1++]+temp)/10;
}
}
if(temp!=0)
result[k++]=temp;
struct ListNode* l3;
l3=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *r,*s;
r=l3;
for(i=0;i<k;i++){
s=(struct ListNode*)malloc(sizeof(struct ListNode));
s->val=result[i];
r->next=s;
r=s;
}
r->next=NULL;
l3=l3->next;
return l3;
}