leetcode——1171. 从链表中删去总和值为零的连续节点

# 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:
        r=[]
        while head:
            r.append(head.val)
            head=head.next
        #print(r)
        i=0
        while i<len(r):
            sum=r[i]
            j=i+1
            while j<len(r) and sum!=0:
                sum+=r[j]
                j+=1
            #print(i,j,sum)
            if sum==0:
                r=r[:i]+r[j:]
            else:
                i+=1
        head=ListNode(0)
        p=head
        for i in range(len(r)):
            p.next=ListNode(r[i])
            p=p.next
        return head.next
                

执行用时 :180 ms, 在所有 python3 提交中击败了32.63%的用户

内存消耗 :13.9 MB, 在所有 python3 提交中击败了100.00%的用户

执行用时为 48 ms 的范例
# 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:
        handle = ListNode(0)
        handle.next = cur = head
        prefix = 0
        m = {0:handle}
        while cur:
            prefix += cur.val
            if prefix in m:
                m[prefix].next = cur.next
            else:
                m[prefix] = cur
            cur = cur.next
        return handle.next

这个我还不能看得太懂,不会做。。。。

——2019.10.24

原文地址:https://www.cnblogs.com/taoyuxin/p/11731394.html

时间: 2024-11-02 16:25:34

leetcode——1171. 从链表中删去总和值为零的连续节点的相关文章

从链表中删除总和值为0的连续节点

给你一个链表的头节点 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: 输入:hea

图解精选 TOP 面试题 001 | LeetCode 237. 删除链表中的节点

题目描述 原题链接 LeetCode 237. 删除链表中的节点:https://leetcode-cn.com/problems/delete-node-in-a-linked-list 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 head =?[4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 ?5? 的第二个节点,那么在调

删除单链表中重复的值(Java版)

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅

删除单链表中重复的值

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅

LeetCode:删除链表中的节点

C++示例: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void deleteNode(ListNode* node) { if (node == NULL || node->next == NULL) { co

删除链表中所有值为k的节点

1. 问题描述 给定一个单链表,删除其中值为k的所有节点.例如:1→2→6→3→4→5→6,删除其中值为6的节点,返回:1→2→3→4→5. 2. 方法与思路 这是一个简单的链表操作题.删除是要考虑的节点所在的位置(头部,中间和尾部),分开处理一下好了.主要过程如下描述: I. while head?>val≠target head = head->next II. 判断head是否为空 if head=NULL return NULL; III. 遍历剩余链表,删除中间和尾部值为k的节点.

链表中删除倒数第K个节点

问题描述 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 问题分析与解决 从问题当中,我们只能得到一个链表和要删除的第K个节点的信息,于是就有以下思路:如果链表为空或者K<0时,直接返回:如若不然,遍历链表的每个节点,每经过一个节点K减1.比如对于1 --> 2 --> 3 --> 4该链表的过程如下: K = 5,所遍历的节点以及K值的变化:1 -- > 2 --> 3 --> 4 4,3,2,1: K = 4,所遍

leetcode——Longest Substring Without Repeating Characters 求链表中无重复字符的最大字串长度(AC)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

leetcode 82. 删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2: 输入: 1->1->1->2->3输出: 2->3 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii著作权归领扣网络所有.商