본문 바로가기
프로그래밍/LeetCode

C++ 2. Add Two Numbers(Leet Code)

by devsu 2020. 6. 13.

Leet Code_2. Add Two Numbers

Dynamic Programming

 

https://leetcode.com/problems/add-two-numbers/

 

문제 해석

 

이 문제를 풀기위해 이해해야 할 내용은 다음과 같습니다.

 

목표

반대로 되어있는 node들을 각 자리별로 더하여 다시 반대로 node를 만든다

방법

1.반대로 되어있는 node

2. 반대로 계산한다

3. 10이 넘는 경우 뒤의 node로 추가해준다 

 

결과

반대로 되어있는 node들을 각 자리별로 더하여 다시 반대로 node를 만든다

 

통과한 코드

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head=NULL, *pos=NULL;
        ListNode *left = l1;
        ListNode *right = l2;
        while(left && right){
            int sum = left->val + right->val;
            ListNode *val = new ListNode(sum);
            if (pos==NULL){
                pos=val;
                head=val;
            }
            else{
                pos->next=val;
                pos = pos->next;
            }
            left = left->next;
            right = right->next;            
        }
        while(left){
            pos->next=left;
            pos = pos->next;
            left = left->next;
        }
        while(right){
            pos->next = right;
            pos = pos->next;
            right = right->next;
        }
        pos = head;
        while(pos){
            if(pos->val>9){
                if (pos->next!=NULL){
                    pos->next->val += 1;
                }
                else{
                    pos->next= new ListNode(1);
                }
                pos->val = pos->val%10;
            }
            pos = pos->next;
        }
        return head;
    }
};