struct ListNode* ReverseList(struct ListNode* head)
{
if(head==NULL || head->next==NULL)
return head;
else
{
struct ListNode *p=head->next,*q;
head->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=head;
head=p;
p=q;
}
}
return head;
}
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
// // write code here
struct ListNode *p1=head1,*p2=head2,*p3=NULL,*head3=NULL,*pre;
int flag=0;
if(p1==NULL)
return p2;
if(p2==NULL)
return p1;
p1=ReverseList(head1);
p2=ReverseList(head2);
int i=0;
p3=(struct ListNode*)malloc(sizeof(struct ListNode));
p3->next=NULL;
head3=p3;
while(p1!=NULL&&p2!=NULL)
{
p3->val=(p1->val+p2->val+i)%10;
i=(p1->val+p2->val+i)/10;
p3->next=(struct ListNode*)malloc(sizeof(struct ListNode));
pre=p3;
p3=p3->next;
p1=p1->next;
p2=p2->next;
}
while(p1!=NULL)
{
p3->val=(p1->val+i)%10;
i=(p1->val+i)/10;
p3->next=(struct ListNode*)malloc(sizeof(struct ListNode));
pre=p3;
p3=p3->next;
p1=p1->next;
}
while(p2!=NULL)
{
p3->val=(p2->val+i)%10;
i=(p2->val+i)/10;
p3->next=(struct ListNode*)malloc(sizeof(struct ListNode));
pre=p3;
p3=p3->next;
p2=p2->next;
}
if(i!=0)
{
p3->val=i;
p3->next=NULL;
}
else
{
free(p3);
pre->next=NULL;
}
return ReverseList(head3);
}