본문 바로가기

알고리즘/LeetCode

[LeetCode] 2. Add Two Numbers (Medium)

Linked list로 저장된 두 개의 숫자 배열 합을 구하는 문제입니다.

두 개의 숫자 배열이 길이가 다를 수 있기 때문에, 둘 중 하나라도 마지막 노드가 아닐 경우 다른 쪽 숫자 배열에 새로운 노드를 추가했습니다. 

 

/**
 * 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* answer = new ListNode;
        ListNode* iter = answer;
        int upper = 0;
        
        while(true)
        {
            if (l1->val + l2->val >= 10)
            {  
                iter->val = l1->val + l2->val - 10; 
                upper = 1;
            }
            else
            {
                iter->val = l1->val + l2->val;
                upper = 0;
            }
            
            if(l1->next != nullptr || l2->next != nullptr)
            {
                if(l1->next == nullptr)
                {
                    ListNode* newl1 = new ListNode;
                    l1->next = newl1;
                }
                
                l1 = l1->next;
                
                if(l2->next == nullptr)
                {
                    ListNode* newl2 = new ListNode;
                    l2->next = newl2;
                }
                l2 = l2->next;
                
                l1->val += upper;
                
                ListNode* newAns = new ListNode;
                iter->next = newAns;
                iter = iter->next;
            } 
            else if(upper == 1) // l1,l2 next is nullptr
            {
                ListNode* newAns = new ListNode;
                iter->next = newAns;
                iter = iter->next;
                
                iter->val = upper;
                return answer;
            }
            else if(upper == 0) // l1,l2 next is nullptr
            {
                return answer;
            }
            
        }
    }
};