Approach

  • 정답을 저장할 dummy 노드와 dummy노드에서 값들을 추가해나가기 위해서 dummy를 가리키는 temp 노드를 생성.
  • l1, l2에 노드 혹은 carry(l1노드와 l2노드 합 10의 자리 수)가 하나라도 NULL이 아니라면 새로운 노드 newnode를 생성하여 값을 저장시킨후 temp노드의 다음 노드로 가리킨다.
  • temp노드를 방금 생성한 newnode를 가리킨다.

Code

/**
 * 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 = l1;
        ListNode* prev;
        int c = 0;

        while(l1 && l2)
        {
            int n = l1->val + l2->val + c;

            if(n >= 10)
            {
                l1->val = n%10;
                c = n / 10;
            }
            else
            {
                l1->val = n;
                c = 0;
            }
            prev = l1;
            l1 = l1->next;
            l2 = l2->next;
        }

        while(l1)
        {
            int n = l1->val + c;
            cout << n << "\n";
            if(n >= 10)
            {
                l1->val = n%10;
                c = n / 10;
            }
            else
            {
                l1->val = n;
                c = 0;
            }
            prev = l1;
            l1 = l1->next;
        }

        if(l2) prev->next = l2;

        while(l2)
        {
            int n = l2->val + c;
            cout << n << "\n";
            if(n >= 10)
            {
                l2->val = n%10;
                c = n / 10;
            }
            else
            {
                l2->val = n;
                c = 0;
            }
            prev = l2;
            l2 = l2->next;
        }

        if(c != 0) prev->next = new ListNode(c);
       
        return answer;
    }
};

Result

profile
누누의 잡다저장소

0개의 댓글