역순으로 저장된 연결 리스트의 숫자를 더하라.
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Input: l1 = [0], l2 = [0]
Output: [0]
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/