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); }