/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: ListNode* reversList(ListNode* head) { if(!head) return nullptr; ListNode* pre=nullptr,*cur=head, *nex=nullptr; while(cur) { nex=cur->next; cur->next = pre; pre = cur; cur=nex; } return pre; } ListNode* addInList(ListNode* head1, ListNode* head2) { if(!head1 || !head2) return head1==nullptr ? head2 : head1; head1 = reversList(head1); head2 = reversList(head2); ListNode* head = new ListNode(0); int flag=0; while(head1 && head2) { int temp = head1->val + head2->val + flag; flag = temp>9 ? 1 : 0; temp %= 10; ListNode* cur = new ListNode(temp); cur->next = head->next; head->next = cur; head1=head1->next; head2 = head2->next; } while(head1) { int temp = head1->val + flag; flag = temp>9 ? 1 : 0; temp %= 10; ListNode* cur = new ListNode(temp); cur->next = head->next; head->next = cur; head1=head1->next; } while(head2) { int temp = head2->val + flag; flag = temp>9 ? 1 : 0; temp %= 10; ListNode* cur = new ListNode(temp); cur->next = head->next; head->next = cur; head2 = head2->next; } head->val = flag; return head->val ? head : head->next; } };