Given the head
of a linked list, we repeatedly delete consecutive sequences of nodes that sum to 0
until there are no such sequences.
After doing so, return the head of the final linked list. You may return any such answer.
(Note that in the examples below, all sequences are serializations of ListNode
objects.)
Example 1:
Input: head = [1,2,-3,3,1] Output: [3,1] Note: The answer [1,2,1] would also be accepted.
Example 2:
Input: head = [1,2,3,-3,4] Output: [1,2,4]
Example 3:
Input: head = [1,2,3,-3,-2] Output: [1]
Constraints:
- The given linked list will contain between
1
and1000
nodes. - Each node in the linked list has
-1000 <= node.val <= 1000
.
思路:先转化成数组,然后running sum去掉和为0的subarray,最后再转化为linkedlist
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def removeZeroSumSublists(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
a = []
p=head
while p:
a.append(p.val)
p=p.next
while 1:
find = False
d = {0:-1}
su=0
for i,v in enumerate(a):
su+=v
if su in d:
find=True
break
d[su]=i
if find:
pre = d[su]
a = a[:pre+1]+a[i+1:]
else:
break
if len(a)==0: return None
root = ListNode(a[0])
p=root
for i in range(1,len(a)):
p.next=ListNode(a[i])
p=p.next
return root