1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public ListNode removeZeroSumSublists(ListNode head) { ListNode dummyHead = new ListNode(-1, head); Map<Integer, ListNode> prefixSumToNodeMap = new HashMap<>(); prefixSumToNodeMap.put(0, dummyHead);
int prefixSum = 0;
ListNode curr = head; while (curr != null) { prefixSum += curr.val; ListNode prevNode = prefixSumToNodeMap.get(prefixSum); if (prevNode != null) { ListNode node = prevNode.next; int tempSum = prefixSum; while (node.next != curr.next) { tempSum += node.val; prefixSumToNodeMap.remove(tempSum); node = node.next; }
prevNode.next = curr.next; } else { prefixSumToNodeMap.put(prefixSum, curr); }
curr = curr.next; }
return dummyHead.next; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public ListNode removeZeroSumSublists(ListNode head) { ListNode dummyHead = new ListNode(-1, head); Map<Integer, ListNode> prefixSumToNodeMap = new HashMap<>(); int prefixSum = 0; for (ListNode curr = dummyHead; curr != null; curr = curr.next) { prefixSum += curr.val; prefixSumToNodeMap.put(prefixSum, curr); }
prefixSum = 0; for (ListNode curr = dummyHead; curr != null; curr = curr.next) { prefixSum += curr.val; curr.next = prefixSumToNodeMap.get(prefixSum).next; }
return dummyHead.next; } }
|
References
1171. Remove Zero Sum Consecutive Nodes from Linked List