LeetCode 1171. 从链表中删去总和值为零的连续节点

题目描述

1171. 从链表中删去总和值为零的连续节点

image-20250507200055727

思路分析

前缀和问题

  1. 使用一个哈希表来记录前缀和及其对应的节点。
  2. 遍历链表,计算前缀和,如果前缀和已经存在于哈希表中,说明从哈希表中记录的节点到当前节点的这段链表的和为 0,需要删除这段链表。
  3. 更新哈希表中的前缀和及其对应的节点。

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func removeZeroSumSublists(head *ListNode) *ListNode {
	dummy := &ListNode{Next: head}
	prefixSum := 0
	sumMap := make(map[int]*ListNode)
	sumMap[0] = dummy

	// 第一次遍历,记录前缀和及其对应的节点
	for cur := dummy; cur != nil; cur = cur.Next {
		prefixSum += cur.Val
		sumMap[prefixSum] = cur
	}

	// 第二次遍历,删除前缀和相同的节点之间的节点
	prefixSum = 0
	for cur := dummy; cur != nil; cur = cur.Next {
		prefixSum += cur.Val
		cur.Next = sumMap[prefixSum].Next
	}

	return dummy.Next
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2024/47592196
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!