ํ•ด๋Š”์„  2022. 1. 15. 13:52

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ˆซ์ž๋ฅผ ๋’ค์ง‘์–ด์„œ 1์˜์ž๋ฆฌ๋ถ€ํ„ฐ ๋งž์ถฐ์„œ ๋„ฃ์–ด์ฃผ๋Š” ๋ง์…ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

์ด๋ฒˆ์—๋Š” ์ •๋ง ๋ฌด์ง€์„ฑ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์„œ ์กฐ๊ฑด๋ฌธ์ด ๋”๋Ÿฝ๊ฒŒ ๋“ค์–ด๊ฐ”๋Š”๋ฐ, ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ•ด์ฃผ๋ ค๋ฉด ์ € ์กฐ๊ฑด๋“ค์„ while๋ฌธ์˜ ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

/**
 * 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* result = NULL;
        ListNode* result_pointer = NULL;
        int up = 0;
        
        while(true){
            ListNode* temp = new ListNode();
            temp -> next = NULL;
            
            int val = up;
            up = 0; 

            if (l1 != NULL) val += l1->val;
            if (l2 != NULL) val += l2->val;

            if(val >= 10){
                val -= 10;
                up = 1;
            }

            temp -> val = val;
                
            if (result_pointer == NULL) {
                result = temp;
                result_pointer = result;
            }
            else {
                result_pointer->next = temp;
                result_pointer = result_pointer->next;
            }
            
            if (l1 != NULL && l1->next != NULL) l1 = l1->next;
            else l1 = NULL;
            
            if (l2 != NULL && l2->next != NULL) l2 = l2->next;
            else l2 = NULL;
            
            if (l1 == NULL && l2 == NULL && up == 0) break;
        }
        return result;
    }
};