Remove Zero Sum Consecutive Nodes — Prefix Sum Map

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro