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