내가 한 것
하다가 도무지 안되겠어서 참고했다.
내 문제의 해결법은 새로운 변수 head 를 놔두고 그 head->next 를 마지막에 리턴해줘서 쭉 이어져 보이도록 하는 것이였다.
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int mul = 1;
int last = 0;
int sum = 0;
ListNode *head = new ListNode(0);
ListNode *result = head;
while(l1 || l2) {
sum = last;
if (l1) {
sum += l1->val;
l1 = l1->next;
}
if (l2) {
sum += l2->val;
l2 = l2->next;
}
result->next = new ListNode(sum%10);
result = result->next;
last = sum/10;
}
if(last > 0)
result->next = new ListNode(last);
return head->next;
}
};
베스트
엄청 어려운데 효율성이 좋은 코드도 있었는데 그래도 이해 되는 선에서 제일 나은 것으로 붙여넣었다.
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode * dummy = new ListNode();
ListNode *temp = dummy;
int carry = 0;
while(l1!=NULL || l2!=NULL || carry)
{
int sum = 0;
if(l1!=NULL)
{
sum += l1->val;
l1 = l1->next;
}
if(l2!=NULL)
{
sum += l2->val;
l2 = l2->next;
}
sum += carry;
carry = sum/10;
ListNode * node = new ListNode(sum%10);
temp->next = node;
temp = temp->next;
}
return dummy->next;
}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
/* TODO: edge cases */
//we modify list1 by performing in place addition
ListNode* p = l1;
ListNode* q = l2;
int carryOver = 0;
bool sameSize = true;
while (p->next != nullptr || q != nullptr) {
if (p->next == nullptr && q->next == nullptr) {
break;
}
int qval = 0;
if (q != nullptr)
qval = q->val;
int sum = p->val + qval + carryOver;
p->val = sum % 10;
carryOver = (sum - (sum % 10)) / 10; //would be 0 if sum < 10
if (p->next == nullptr && q->next != nullptr) {
//link the remaining bit of l2
p->next = q->next;
q->next = nullptr;
sameSize = false;
}
p = p->next;
if (q != nullptr) {
q = q->next;
} else {
sameSize = false;
}
}
int qval = 0;
if (q != nullptr)
qval = q->val;
int sum = p->val + qval + carryOver;
p->val = sum % 10;
carryOver = (sum - (sum % 10)) / 10; //would be 0 if sum < 10
if (carryOver != 0) {
ListNode* n = new ListNode;
n->val = 1;
p->next = n;
n->next = nullptr;
}
return l1;
}
};
728x90
반응형
'자료구조 알고리즘 > 코딩테스트' 카테고리의 다른 글
Insert into a Cyclic Sorted List (0) | 2022.01.30 |
---|---|
[다시예정] Flatten a Multilevel Doubly Linked List (0) | 2022.01.30 |
Merge Two Sorted Lists (0) | 2022.01.28 |
Odd Even Linked List (0) | 2021.07.07 |
Remove Linked List Elements (0) | 2021.07.06 |