struct ListNode*addlist(struct ListNode*a,struct ListNode*b,int cnt)//cnt进位
{
    if(a!=NULL&&b!=NULL){
        cnt+=a->val+b->val,a->val=cnt%10,a->next=addlist(a->next,b->next,cnt/10);
        return a;
    }
    if(a==NULL&&b==NULL&&cnt){
        struct ListNode*result=(struct ListNode*)malloc(sizeof(struct ListNode));
        result->val=cnt;
        result->next=NULL;
        return result;
    }
    if(a==NULL){
        if(!cnt)return b;
        cnt+=b->val,b->val=cnt%10,b->next=addlist(NULL,b->next,cnt/10);
        return b;
    }
    if(!cnt)return a;
    cnt+=a->val,a->val=cnt%10,a->next=addlist(a->next,NULL,cnt/10);
    return a;
}
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
    // write code here
    struct ListNode *o=(struct ListNode*)malloc(sizeof(struct ListNode)),*temp,*result;
    o->next=NULL;
    while(head1!=NULL)temp=head1,head1=head1->next,temp->next=o->next,o->next=temp;//倒转head1
    head1=o->next;
    o->next=NULL;
    while(head2!=NULL)temp=head2,head2=head2->next,temp->next=o->next,o->next=temp;//倒转head2
    head2=o->next;
    o->next=NULL;
    head1=addlist(head1,head2,0);//相加
    while(head1!=NULL)temp=head1,head1=head1->next,temp->next=o->next,o->next=temp;//将结果倒转
    result=o->next;
    return result;
}