You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: int listLen(ListNode* head) { int res = 0; while(head!=NULL){ res++; head = head->next; } return res; } ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int len1 = listLen(l1); int len2 = listLen(l2); ListNode* head1 = len1>len2 ? l1:l2; ListNode* head2 = len1>len2 ? l2:l1; ListNode* head = head1; int c = 0; ListNode* pre = NULL; while(head1!=NULL && head2!=0){ int tmp = (head1->val + head2->val + c )%10; c = (head1->val + head2->val + c )/10; head1->val = tmp; pre = head1; head1 = head1->next; head2 = head2->next; cout<<"tmp = "<<tmp<<",c="<<c<<endl; } while(head1!=NULL){ int tmp = (head1->val + c)%10; c = (head1->val + c)/10; head1->val = tmp; pre = head1; head1 = head1->next; cout<<"tmp = "<<tmp<<",c="<<c<<endl; } while(head2!=NULL){ int tmp = (head2->val + c)%10; c = (head2->val + c)/10; head2->val = tmp; pre = head2; head2 = head2->next; cout<<"tmp = "<<tmp<<",c="<<c<<endl; } if(c!=0){ ListNode *node = new ListNode(c); pre->next = node; } return head; } };