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

 

posted @ 2014-09-13 19:35  yqc  阅读(85)  评论(0编辑  收藏  举报