---
# System prepended metadata

title: (LeetCode) 2. Add Two Numbers

---

# (LeetCode) 2. Add Two Numbers

https://leetcode.com/problems/add-two-numbers/

###### Medium

##### Description
> You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
> 
> You may assume the two numbers do not contain any leading zero, except the number 0 itself.
##### Example
> Input: l1 = [2,4,3], l2 = [5,6,4]
> Output: [7,0,8]
> Explanation: 342 + 465 = 807.

##### Solution1
```python=
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:

        head = ListNode(0)
        cur = head

        p = l1
        q = l2

        while p or q:

            x = p.val if p else 0
            y = q.val if q else 0
    
            sum = cur.val + x + y
            carry = int(sum/10)

            cur.val = sum % 10

            if p:
                p = p.next
            if q:
                q = q.next

            if p or q or carry > 0:
                cur.next = ListNode(carry)
                cur = cur.next

        return head
```

##### Solution2(Recursive)
```python=
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode, carry:int=0) -> ListNode:

        node = ListNode(carry)

        x = l1
        y = l2

        if x:
            node.val += x.val
            x = x.next
        if y:
            node.val += y.val
            y = y.next

        c = int(node.val/10)
        node.val = node.val % 10

        if x or y or c > 0:
            node.next = self.addTwoNumbers(x,y,c)

        return node
```

