首页 > 代码库 > Add Two Numbers

Add Two Numbers

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

 

Add Two Numbers