LeetCode 1171. 从链表中删去总和值为零的连续节点
题目描述
思路分析
前缀和问题
- 使用一个哈希表来记录前缀和及其对应的节点。
- 遍历链表,计算前缀和,如果前缀和已经存在于哈希表中,说明从哈希表中记录的节点到当前节点的这段链表的和为 0,需要删除这段链表。
- 更新哈希表中的前缀和及其对应的节点。
参考代码
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
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用