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

Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7

위의 문제와 같은데, reverse 조건이 붙지 않았다.

푸는 과정이 좀 더 길어졌을 뿐이다. 우선 두 개의 list 들을 reverse 시키고

3 4 2 7

4 6 5

이 둘을 더하면 된다. 그러면 7 0 8 7 이 나온다.

그리고 결과를 다시 뒤집는다.

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* prev = l1;
        ListNode* cur = l1->next;
        l1->next = NULL;
        while(cur)
        {
            ListNode* temp = cur->next;
            cur->next = prev;
            prev = cur;
            cur = temp;
        }
        ListNode* reverseL1 = prev;
        
        prev = l2;
        cur = l2->next;
        l2->next = NULL;
        while(cur)
        {
            ListNode* temp = cur->next;
            cur->next = prev;
            prev = cur;
            cur = temp;
        }
        ListNode* reverseL2 = prev;
        
        int carry = 0;
        int l1Val = 0;
        int l2Val = 0;
        ListNode* dummy = new ListNode(0);
        ListNode* ans = dummy;
        while(reverseL1 || reverseL2 || carry == 1)
        {
            if(reverseL1 != NULL)
            {
                l1Val = reverseL1->val;
                reverseL1= reverseL1->next;
            }
            else l1Val = 0;
            
            if(reverseL2 != NULL)
            {
                l2Val = reverseL2->val;
                reverseL2= reverseL2->next;
            }
            else l2Val = 0;
            
            dummy->next = new ListNode((l1Val + l2Val + carry) % 10);
            carry = (l1Val + l2Val + carry) / 10;            
            dummy = dummy->next;
        }
        
        if(ans->next == NULL || ans->next->next == NULL) return ans->next;
        prev = ans->next;
        cur = ans->next->next;
        ans->next->next = NULL;
        while(cur)
        {
            ListNode* temp = cur->next;
            cur->next = prev;
            prev = cur;
            cur = temp;
        }
        
        return prev;
    }
};

뒤집는 과정을 함수로 빼면 좋았을 거 같다.

Runtime: 60 ms, faster than 11.22% of C++ online submissions for Add Two Numbers II.

Memory Usage: 71 MB, less than 75.15% of C++ online submissions for Add Two Numbers