[LeetCode]두 수의 덧셈

Inhwan98·2023년 3월 30일
0

PTU STUDY_leetcode

목록 보기
16/24

문제

역순으로 저장된 연결 리스트의 숫자를 더하라.

예제

  • Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
  • Example 2:
Input: l1 = [0], l2 = [0]
Output: [0]
  • Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

코드

/**
 * 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 {
private:
	ListNode* head;
	ListNode* tail;
	int c_val;
	int n_val;
public:
	Solution()
	{
		head = NULL;
		tail = NULL;
        c_val = 0;
		n_val = 0;
	}
	void addNode(int val);
    ListNode* Addsum(ListNode* l1, ListNode* l2);

	ListNode* getHead() { return head; }
    
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

	return Addsum(l1, l2);

    }
};

void Solution::addNode(int val)
{
	ListNode* temp = new ListNode;
	temp->val = val;
	temp->next = NULL;

	if (head == NULL)
	{
		head = temp;
		tail = temp;
	}
	else
	{
		tail->next = temp;
		tail = temp;
	}
}

ListNode* Solution::Addsum(ListNode* l1, ListNode* l2)
{
	if (l1 == NULL && l2 == NULL && n_val == 0) return head;
	if (l1 == NULL && l2 == NULL && n_val != 0)
	{
		addNode(n_val);
		return head;
	}
	else if (l1 != NULL && l2 == NULL)
	{
		c_val = l1->val + n_val;
		n_val = 0;
		if (c_val >= 10)
		{
			n_val = c_val / 10;
			c_val = c_val % 10;
			addNode(c_val);
		}
		else
			addNode(c_val);

		Addsum(l1->next, l2);
	}
	else if (l1 == NULL && l2 != NULL)
	{
		c_val = l2->val + n_val;
		n_val = 0;
		if (c_val >= 10)
		{
			n_val = c_val / 10;
			c_val = c_val % 10;
			addNode(c_val);
		}
		else
			addNode(c_val);

		Addsum(l1, l2->next);
	}
	else if(l1 != NULL && l2 != NULL)
	{
		c_val = l1->val + l2 ->val + n_val;
		n_val = 0;
		if (c_val >= 10)
		{
			n_val = c_val / 10;
			c_val = c_val % 10;
			addNode(c_val);
		}
		else
			addNode(c_val);
		
		Addsum(l1->next, l2->next);
	}
	return head;
}

결과

Runtime 44 ms / Memory 71.6 MB
https://leetcode.com/problems/add-two-numbers/submissions/925081711/


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

profile
코딩마스터

0개의 댓글