2. Add Two Numbers

# Medium

Key idea: when add node, must initilize a node first, then assgin to the result. Keep head node.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *res=nullptr;
        ListNode *head;
        int sum = 0;
        while(l1 && l2) {
            sum += l1->val + l2->val;
            ListNode* node = new ListNode(sum%10);
            sum = sum/10;
            l1 = l1->next;
            l2 = l2->next;
            if(res == nullptr) {
                res = node;
                head = node;
                continue;
            }
            res->next = node;
            res = res->next;
        }
        
        // if l1 is longer
        while(l1) {
            sum += l1->val;
            l1 = l1->next;
            ListNode* node = new ListNode(sum%10);
            sum = sum/10;
            if(res == nullptr) {
                res = node;
                head = node;
                continue;
            }            
            res->next = node;
            res = res->next;
        }
        
        // if l2 is longer
        while(l2) {
            sum += l2->val;
            l2 = l2->next;
            ListNode* node = new ListNode(sum%10);
            sum = sum/10;
            if(res == nullptr) {
                res = node;
                head = node;
                continue;
            }            
            res->next = node;
            res = res->next;
        }
        
        if(sum == 1) {
            ListNode* node = new ListNode(sum);
            res->next = node;
        }
        
        return head;
    }
};

Last updated