# 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; } ```