Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
3
Indexable
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution 
{
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
    {
        ListNode* res = new ListNode();
        ListNode* temp = res;

        int overload = 0;
        while (l1 != nullptr && l2 != nullptr)
        {
            temp->val = l1->val + l2->val;
            if (overload != 0)
                temp->val += overload;
            overload = 0;
            if (temp->val > 9)
            {
                overload = temp->val / 10;
                temp->val = temp->val % 10;
            }
            if (l1->next != nullptr && l2->next != nullptr)
                temp->next = new ListNode();
            l1 = l1->next;
            l2 = l2->next;
            if (temp->next != nullptr)
                temp = temp->next;
        }

        if (l1 != nullptr || l2 != nullptr)
        {
            ListNode* remainder = l1 != nullptr ? l1 : l2;
            while (remainder != nullptr)
            {
                temp->next = new ListNode();
                temp = temp->next;
                temp->val = overload + remainder->val;
                overload = 0;
                if (temp->val > 9)
                {
                    overload = temp->val / 10;
                    temp->val = temp->val % 10;
                }
                remainder = remainder->next;
            }
        }

        while (overload != 0)
        {
            temp->next = new ListNode();
            temp = temp->next;
            temp->val = overload;
            overload = 0;
            if (temp->val > 9)
            {
                overload = temp->val / 10;
                temp->val = temp->val % 10;
            }
        }

        return res;
    }
};