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

 

你可能感兴趣的:(LeetCode)