Try   HackMD

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

/**
 * 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;
}