1
class Solution {
2
public:
3
ListNode *removeZeroSumSublists(ListNode *head) {
4
unordered_map<int, ListNode *> m; // {prefix -> node}
5
ListNode *dummy = new ListNode(0);
6
ListNode *cur = dummy;
7
dummy->next = head;
8
int prefix = 0;
9
while (cur) {
10
prefix += cur->val;
11
if (m[prefix] != NULL) {
12
ListNode *t = m[prefix]->next;
13
int sum = prefix;
14
sum += t->val;
15
while (sum != prefix) {
16
m.erase(sum);
17
t = t->next;
18
sum += t->val;
19
}
20
m[prefix]->next = cur->next;
21
} else
22
m[prefix] = cur;
23
cur = cur->next;
24
}
25
return dummy->next;
26
}
27
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0