Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[LeetCode] 1171. Remove Zero Sum Consecutive Nodes from Linked List 본문
PS/LeetCode
[LeetCode] 1171. Remove Zero Sum Consecutive Nodes from Linked List
riveroverflow 2024. 3. 12. 21:43728x90
반응형
https://leetcode.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list/description/
Leetcode - Remove Zero Sum Consecutive Nodes from Linked List
문제 유형 : 연결리스트, 재귀
문제 난이도 : Medium
문제
Given the head of a linked list, we repeatedly delete consecutive sequences of nodes that sum to 0 until there are no such sequences.
After doing so, return the head of the final linked list. You may return any such answer.
(Note that in the examples below, all sequences are serializations of ListNode objects.)
연결리스트의 head가 주어진다. 이 연결리스트에서 합이 0인 부분 연결리스트를 제거해야 한다.
풀이
투 포인터를 이용할 수도 있겠지만, 재귀를 이용하면 훨씬 효율적이다.
현재 노드부터 순차적으로 순회하면서, sum을 구한다.
만약 sum이 0이 된다면, 부분 연결리스트를 없애고(head에서 그 자리로 포인터 변경),
그 부분부터 다시 시작한다.
만약 순회하는 내내 없다면, 현재 노드의 다음 노드를 호출하여 재귀호출한다.
head를 반환한다.
코드
C++
/**
* 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 {
public:
ListNode* removeZeroSumSublists(ListNode* head) {
if (head == NULL) return head;
auto curr = head;
int sum = 0;
while(curr != NULL) {
sum += curr -> val;
if(sum == 0) {
head = curr -> next;
return removeZeroSumSublists(head);
}
curr = curr -> next;
}
head -> next = removeZeroSumSublists(head -> next);
return head;
}
};
728x90
반응형
'PS > LeetCode' 카테고리의 다른 글
[Leetcode] 525. Contiguous Array (0) | 2024.03.16 |
---|---|
[LeetCode] 2485. Find the Pivot Integer (0) | 2024.03.13 |
[Leetcode] 791. Custom Sort String (0) | 2024.03.11 |
[LeetCode] 349. Intersection of Two Arrays (0) | 2024.03.10 |
[LeetCode] 2540. Minimum Common Value (0) | 2024.03.09 |