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
解决方式:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        if(l1==NULL||l2==NULL)
            return NULL;
        int c = 0;
        ListNode* result = new ListNode(0);
        ListNode* pNode = result;
        pNode->next = NULL;
        pNode->val = (l1->val+l2->val)%10;
        c = (l1->val+l2->val)/10;
        l1 = l1->next;
        l2 = l2->next;
        while(l1!=NULL&&l2!=NULL)
        {
            ListNode* temp = new ListNode(0);
            temp->next = NULL;
            temp->val = (l1->val+l2->val+c)%10;
            c = (l1->val+l2->val+c)/10;
            pNode->next = temp;
            pNode = pNode->next;
            l1 = l1->next;
            l2 = l2->next;
        }
        while(l1!=NULL)
        {
            ListNode* temp = new ListNode(0);
            temp->next = NULL;
            temp->val = (l1->val+c)%10;
            c = (l1->val+c)/10;
            pNode->next = temp;
            pNode = pNode->next;
            l1=l1->next;
        }
         while(l2!=NULL)
        {
            ListNode* temp = new ListNode(0);
            temp->next = NULL;
            temp->val = (l2->val+c)%10;
            c = (l2->val+c)/10;
            pNode->next = temp;
            pNode = pNode->next;
            l2=l2->next;
        }
        if(c)
        {
            ListNode* temp = new ListNode(c);
            pNode->next = temp;

        }
        return result;
    }
};
posted @ 2018-04-18 13:35  zhchoutai  阅读(100)  评论(0编辑  收藏  举报