您现在的位置是:首页 >技术交流 >LeetCode 1171. 从链表中删去总和值为零的连续节点网站首页技术交流
LeetCode 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 a a个节点之和是 c n t cnt cnt,并且第一个节点到第 b b b个节点之和也是 c n t cnt cnt,那么就说明第 a a a个节点到第 b b b个节点之和是 0 0 0,将 a a a节点的 n e x t next next赋值为 b b b节点的 n e x t next next即可。
因此我们只需要使用哈希表,遍历一遍列表,计算得到前 i i i个节点的和,并存入哈希表 l a s t A p p e a r 。这样 lastAppear。这样 lastAppear。这样lastAppear[cnt] 就为最后一个前缀和为 就为最后一个前缀和为 就为最后一个前缀和为cnt$的节点。
再次遍历一遍列表,将当前节点的 n e x t next next替换为最后一个前缀和也为 c n t cnt cnt的节点的 n e x t next next即可。
- 时间复杂度 O ( n ) O(n) O(n),其中 n n n是链表中元素的个数。
- 空间复杂度 O ( n ) O(n) O(n)
AC代码
C++
class Solution {
public:
ListNode* removeZeroSumSublists(ListNode* head) {
ListNode* emptyHead = new ListNode(0, head);
unordered_map<int, ListNode*> lastAppear;
int cnt = 0;
for (ListNode* node = emptyHead; node; node = node->next) {
cnt += node->val;
lastAppear[cnt] = node;
}
cnt = 0;
for (ListNode* node = emptyHead; node; node = node->next) {
cnt += node->val;
node->next = lastAppear[cnt]->next;
}
return emptyHead->next;
}
};
Python
# from typing import Optional
# # Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeZeroSumSublists(self, head: Optional[ListNode]) -> Optional[ListNode]:
emptyHead = ListNode(0, head)
lastAppear = dict()
cnt = 0
node = emptyHead
while node:
cnt += node.val
lastAppear[cnt] = node
node = node.next
cnt = 0
node = emptyHead
while node:
cnt += node.val
node.next = lastAppear[cnt].next
node = node.next
return emptyHead.next
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/131153552