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
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 12 13 ListNode *l3 = new ListNode(0); 14 ListNode *p1 = l1; 15 ListNode *p2 = l2; 16 ListNode *p3 = l3; 17 18 int carry = 0; 19 int sum = 0; 20 while(p1 != NULL && p2 != NULL) 21 { 22 sum = p1->val + p2->val + carry; 23 ListNode *node = new ListNode(sum % 10); 24 p3->next = node; 25 p3 = node; 26 27 carry = sum / 10; 28 node = NULL; 29 30 p1 = p1->next; 31 p2 = p2->next; 32 } 33 34 while(p1 != NULL) 35 { 36 sum = p1->val + carry; 37 ListNode *node = new ListNode(sum % 10); 38 p3->next = node; 39 p3 = node; 40 41 carry = sum / 10; 42 node = NULL; 43 44 p1 = p1->next; 45 } 46 47 while(p2 != NULL) 48 { 49 sum = p2->val + carry; 50 ListNode *node = new ListNode(sum % 10); 51 p3->next = node; 52 p3 = node; 53 54 carry = sum / 10; 55 node = NULL; 56 57 p2 = p2->next; 58 } 59 60 if(carry != 0) 61 { 62 ListNode *node = new ListNode(carry); 63 p3->next = node; 64 p3 = node; 65 66 node = NULL; 67 } 68 69 ListNode *del = l3; 70 l3 = l3->next; 71 delete del; 72 73 return l3; 74 } 75 };