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/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