LeetCode 1171. 從連結串列中刪去總和值為零的連續節點
阿新 • • 發佈:2021-01-03
1171. 從連結串列中刪去總和值為零的連續節點
Difficulty: 中等
給你一個連結串列的頭節點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
.
Solution
Language: ****
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def removeZeroSumSublists(self, head: ListNode) -> ListNode: dummy = p = ListNode(-1) dummy.next = head prefix, d = 0, {} # 字首和 while p: # 求節點累計的和 prefix += p.val # 從hash表中找到滿足累計和的節點,如果沒有則把p賦給node node = d.get(prefix, p) # 當累計和出現在hash表中的時候,把從第一個符合累計和的節點以及它後面的節點從雜湊表中移除 while prefix in d: d.popitem() # 直接從node.next到p.next,中間的節點全部忽略 d[prefix] = node p = p.next node.next = p return dummy.next