본문 바로가기

Algorithm/Leet Code

LeetCode problem #2 Add Two Numbers. Algorithm, 알고리즘, 코딩 문제풀이, LeetCode, 릿코드, 기술면접, CodeFights, CodeSignal, 코드파이트, 코드시그널, c++ java c#

LeetCode problem #2 Add Two Numbers. 


Algorithm, 알고리즘, 코딩 문제풀이, LeetCode, 릿코드, 기술면접, CodeFights, CodeSignal, 코드파이트, 코드시그널, c++ java c#



Q.

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.


You may assume the two numbers do not contain any leading zero, except the number 0 itself.


 두개의 양의 정수를 나타내는 비어있지 않은 연결리스트를 입력받는다. 자릿수는 역으로 정렬되어 저장되어 있고, 각각의 노드는 하나의 자릿수를 의미한다. 두 연결리스트의 숫자들을 더하고, 결과값을 연결리스트로 반환해라.



Example:


Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

Explanation: 342 + 465 = 807.



//Process

//1. Input two node address

//2. Iterate till the end of one linkedList

// 2.1. Add that same index two nodes

// 2.2. Check if this sum is over 1 digit

//  2.2.1. If so -> Check if that node has next node address

//   2.2.1.1. If so -> Add 1 to next node and check digit again.

//   2.2.1.2. If not -> Make new node(1)

// 2.3. Move to next index

//3. Return linkedList made

//4. Finish



//처리과정

//1. 연결리스트 시작부 2개의 노드 주소를 입력받는다.

//2. 둘 중 한개 리스트의 끝까지 반복한다.

// 2.1. 인덱스 번째에 해당하는 양쪽 노드들의 합을 구한다.

// 2.2. 합이 한자리수를 넘어가는지 확인해서

//  2.2.1. 넘어가면 -> 해당 노드 이후 다음 노드가 있는지 확인해서

//   2.2.1.1. 있으면 -> 다음 노드 값과 더하고 다시 자릿수 확인 반복

//   2.2.1.2. 없으면 -> 다음 노드를 자릿수 추가해서 만든다.

// 2.3. 다음 인덱스 노드로 넘어간다.

//3. 결과 연결리스트를 반환한다.

//4. 끝낸다.




/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

 *     ListNode(int x) : val(x), next(NULL) {}

 * };

 */

class Solution {

public:

    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

        

        ListNode* answerNode = l1;

        

        while (l2 != 0) {

            l1->val += l2->val;

            

            checkDigit(l1);

            

            if (l2->next != 0 && l1->next == 0) {

                l1->next = new ListNode(0);

            }

            l1 = l1->next;

            l2 = l2->next;

        }

        

        return answerNode;

    }

    

    void checkDigit(ListNode* l1) {

        if (l1->val >= 10) {

            if (l1->next != 0) {

                l1->val = l1->val - 10;

                l1->next->val += 1;

                checkDigit(l1->next);

            } else {

                l1->val = l1->val - 10;

                l1->next = new ListNode(1);

                checkDigit(l1->next);

            }

        }

    }

};




2018/10/28 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #21 isIPv4Address. Algorithm, 알고리즘, Codefights, CodeSignal, regx, 정규표현식, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/28 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #20 arrayMaximalAdjacentDifference. Algorithm, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/27 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #19 AreEquallyStrong. Algorithm, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/24 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #18 PalindromeRearranging, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/24 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #17 ArrayChange, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/21 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #16 AreSimilar?, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/21 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #15 AddBorder, Codefights, CodeSignal, 코드파이트, 코드시그널, c++ java c# scalar

2018/10/20 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #14 AlternatingSums, Codefights, CodeSignal

2018/10/19 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #13 ReverseParentheses, Codefights, CodeSignal

2018/10/08 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #12 SortByHeight

2018/10/06 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #11 IsLucky

2018/10/03 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #10 CommonCharacterCount

2018/09/26 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #9 AllLongestStrings

2018/09/24 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #8 MatrixElementsSum

2018/09/23 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #7 AlmostIncreasingSequence

2018/09/22 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #6 MakeArrayConsecutive2

2018/09/21 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #5 ShapeArea

2018/09/19 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #4 AdjacentElementsProduct

2018/09/16 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #3 CheckPalindrome

2018/09/16 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #2 CenturyFromYear

2018/09/16 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #1 Add