반응형
https://leetcode.com/problems/merge-nodes-in-between-zeros
0이 나올 때까지 구했던 합으로 새로운 노드를 만들어서 연결해줍니다.
class Solution {
public:
ListNode* mergeNodes(ListNode* head) {
int sum = 0;
ListNode *cur = head->next, *res = new ListNode();
ListNode *resCur = res;
while(cur) {
sum += cur->val;
if(cur->val == 0) {
resCur->next = new ListNode(sum);
resCur = resCur->next;
sum = 0;
}
cur = cur->next;
}
return res->next;
}
};
기존 리스트에 머지하는 방식으로, 추가 공간 없이 구할 수도 있습니다.
머지된 리스트를 관리하는 slow 포인터와 기존 리스트를 순회하는 fast 포인터를 둡니다.
fast 포인터가 0을 방문할 때 까지 slow 포인터에 값을 더해줍니다.
class Solution {
public:
ListNode* mergeNodes(ListNode* head) {
ListNode *slow = head, *fast = head;
while(true) {
slow->val += fast->val;
fast = fast->next;
if(!fast->next) break;
if (fast->val == 0) {
slow = slow->next;
slow->val = 0;
}
}
slow->next = NULL;
return head;
}
};
반응형
'기록' 카테고리의 다른 글
LeetCode 1550. Three Consecutive Odds (0) | 2024.07.06 |
---|---|
LeetCode 350. Intersection of Two Arrays II (0) | 2024.07.06 |
LeetCode 2582. Pass the Pillow (0) | 2024.07.06 |
LeetCode 2058. Find the Minimum and Maximum Number of Nodes Between Critical Points (0) | 2024.07.06 |
LeetCode 2285. Maximum Total Importance of Roads (0) | 2024.06.30 |