1171.从链表中删去总和值为零的连续节点
【LetMeFly】1171.从链表中删去总和值为零的连续节点
力扣题目链接:https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/
给你一个链表的头节点 head
,请你编写代码,反复删去链表中由 总和 值为 0
的连续节点组成的序列,直到不存在这样的序列为止。
删除完毕后,请你返回最终结果链表的头节点。
你可以返回任何满足题目要求的答案。
(注意,下面示例中的所有序列,都是对 ListNode
对象序列化的表示。)
示例 1:
输入:head = [1,2,-3,3,1] 输出:[3,1] 提示:答案 [1,2,1] 也是正确的。
示例 2:
输入:head = [1,2,3,-3,4] 输出:[1,2,4]
示例 3:
输入:head = [1,2,3,-3,-2] 输出:[1]
提示:
- 给你的链表中可能有
1
到1000
个节点。 - 对于链表中的每个节点,节点的值:
-1000 <= node.val <= 1000
.
方法一:哈希表 + 前缀和
假如从第一个节点到第$a$个节点之和是$cnt$,并且第一个节点到第$b$个节点之和也是$cnt$,那么就说明第$a$个节点到第$b$个节点之和是$0$,将$a$节点的$next$赋值为$b$节点的$next$即可。
因此我们只需要使用哈希表,遍历一遍列表,计算得到前$i$个节点的和,并存入哈希表$lastAppear。这样$lastAppear[cnt]$就为最后一个前缀和为$cnt$的节点。
再次遍历一遍列表,将当前节点的$next$替换为最后一个前缀和也为$cnt$的节点的$next$即可。
- 时间复杂度$O(n)$,其中$n$是链表中元素的个数。
- 空间复杂度$O(n)$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/131153552
1171.从链表中删去总和值为零的连续节点
https://blog.letmefly.xyz/2023/06/11/LeetCode 1171.从链表中删去总和值为零的连续节点/