# Leetcode 2 Solution

## Thinking Process

This is a basic question. The solution to the question is basically to simulate the calculation process, i.e., adding each digits while doing the iteration. Be sure to keep the `carry` bit.

## Time & Space Complexity

Assuming N is the size of the bigger list, the time & space compelxities are:

• Time complexity: `O(N)`
• Space complexity: `O(N)`

## Solution

``````/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* res = NULL;
ListNode* cur = NULL;

bool carry = false;

while (l1 || l2)
{
int val = 0;

if (l1)
{
val += l1->val;
l1 = l1->next;
}

if (l2)
{
val += l2->val;
l2 = l2->next;
}

if (carry)
{
val++;
carry = false;
}

if (val >= 10)
{
val -= 10;
carry = true;
}

ListNode* node = new ListNode(val);

if (res == NULL)
{
res = node;
cur = node;
}
else
{
cur->next = node;
cur = node;
}
}

if (carry)
cur->next = new ListNode(1);

return res;
}
};
``````