struct ListNode* overturn(struct ListNode* head1){//翻转链表
struct ListNode* a1,*a2;
a1=head1->next;
a2=a1;
if(a1->next){
a2=a1->next;
}
head1->next=NULL;
while(head1!=a2){
a1->next=head1;
head1=a1;
a1=a2;
if(a2->next!=NULL&&a2!=head1){
a2=a2->next;
}
}
return head1;
}
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
if(head1==NULL){
return head2;
}
if(head2==NULL){
return head1;
}
struct ListNode* phead1,*phead2,*pphead=NULL,*HEAD;
phead1=overturn(head1);
phead2=overturn(head2);
int NUM=0;
while(phead1||phead2){
int num=0;
if(phead1){
num+=phead1->val;
phead1=phead1->next;
}
if(phead2){
num+=phead2->val;
phead2=phead2->next;
}
NUM+=num;
if(pphead==NULL){
HEAD=pphead=(struct ListNode*)malloc(sizeof(struct ListNode));
pphead->next=NULL;
}
else {
pphead->next=(struct ListNode*)malloc(sizeof(struct ListNode));
pphead=pphead->next;
pphead->next=NULL;
}
pphead->val=NUM%10;
NUM/=10;
}
if(NUM){
pphead->next=(struct ListNode*)malloc(sizeof(struct ListNode));
pphead=pphead->next;
pphead->next=NULL;
pphead->val=NUM;
}
return overturn(HEAD);
}