Remove Zero Sum Consecutive Nodes — Prefix Sum Map
Advertisement
Problem 233 · Remove Zero Sum Consecutive Nodes from Linked List
Difficulty: Medium · Pattern: Prefix Sum + HashMap on LL
Intuition
Use prefix sum map: if same prefix appears twice, the nodes between them sum to 0 → remove them. Make two passes.
Solutions
# Python
def removeZeroSumSublists(head):
dummy = ListNode(0, head)
prefix = 0
prefix_map = {0: dummy}
cur = head
# First pass: record last occurrence of each prefix sum
while cur:
prefix += cur.val
prefix_map[prefix] = cur
cur = cur.next
# Second pass: skip zero-sum segments
prefix = 0
cur = dummy
while cur:
prefix += cur.val
cur.next = prefix_map[prefix].next
cur = cur.next
return dummy.next
// Java
public ListNode removeZeroSumSublists(ListNode head) {
ListNode dummy = new ListNode(0, head);
Map<Integer,ListNode> map = new HashMap<>();
int prefix = 0;
for (ListNode cur = dummy; cur != null; cur = cur.next) {
prefix += cur.val; map.put(prefix, cur);
}
prefix = 0;
for (ListNode cur = dummy; cur != null; cur = cur.next) {
prefix += cur.val; cur.next = map.get(prefix).next;
}
return dummy.next;
}
Complexity
- Time: O(n)
- Space: O(n)
Advertisement