[LeetCode] 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         ListNode *head = new ListNode(0);
13         ListNode *p = head, *p1 = l1, *p2 = l2;
14         int val, val1, val2;
15         int carry = 0;
16         while (p1 != NULL || p2 != NULL) {
17             val1 = val2 = 0;
18             if (p1 != NULL) {
19                 val1 = p1->val;
20                 p1 = p1->next;
21             }
22             if (p2 != NULL) {
23                 val2 = p2->val;
24                 p2 = p2->next;
25             }
26             val = val1 + val2 + carry;
27             carry = val / 10;
28             val %= 10;
29             p->next = new ListNode(val);
30             p = p->next;
31         }
32         if (carry != 0) {
33             p->next = new ListNode(carry);
34         }
35         ListNode *sum = head->next;
36         delete head;
37         return sum;
38     }
39 };

 

posted @ 2015-03-07 23:13  Eason Liu  阅读(154)  评论(0编辑  收藏  举报