#define MANLEN 1000
void recursion(struct ListNode* l1, struct ListNode* l2,int* res,int* len,int* flag,int* pst){
if(l1 || l2){
*(pst)=(l1)?1 :0;
int temp1=(l1)?l1->val :0;
int temp2=(l2)?l2->val :0;
res[(*len)++]=( temp1 + temp2 + *flag )%10;;
*flag = ( (temp1 + temp2 + *flag) >= 10 )?1 :0;
}
if(!l1 && !l2){
if(*flag)
res[(*len)++]=1;
return;
}
recursion((l1)?l1->next:l1,(l2)?l2->next:l2,res,len,flag,pst);
if(*pst)
l1->val=res[--(*len)];
else
l2->val=res[--(*len)];
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int res[MANLEN]={0};
int len=0, pst=0, flag=0;
recursion(l1,l2,res,&len,&flag,&pst);
if(len>0){
struct ListNode* p=(struct ListNode*)calloc(sizeof(struct ListNode),1);
p->val=res[0];
p->next=(pst)?l1 :l2;
return p;
}
return (pst)?l1 :l2;
}