# Leetcode 2. Add Two Numbers
###### tags: `Leetcode`
https://leetcode.com/problems/add-two-numbers/
## 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 1:**
```
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
```
**Example 2:**
```
Input: l1 = [0], l2 = [0]
Output: [0]
```
**Example 3:**
```
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
```
**Constraints:**
```
The number of nodes in each linked list is in the range [1, 100].
0 <= Node.val <= 9
It is guaranteed that the list represents a number that does not have leading zeros.
```
## Solution in C
```c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
l3->val=0;
l3->next=NULL;
bool carry=false;
struct ListNode *p = l1, *q = l2, *r = l3;
while(true){
if (carry==true) r->val+=1;
if (p!=NULL){
r->val+=p->val;
p = p->next;
}
if (q!=NULL){
r->val+=q->val;
q = q->next;
}
carry=false;
if (r->val>=10){
carry=true;
r->val -= 10;
}
if(p==NULL && q==NULL && carry==false)
break;
r->next = (struct ListNode *)malloc(sizeof(struct ListNode));
r = r->next;
r->val=0;
r->next=NULL;
}
return l3;
}
```