【Python3】 LeetCode 7月挑战题目之20 - Remove Linked List Elements

第二十天问:Remove Linked List Elements

首先,先介绍一下这次题目。现在给你一条单链表 (Singly-linked List),每个节点都储存了一个整数,然后需要刪除数值与val相同的节点,再返回完成刪除的单链表。

大家好,我是一个喜欢研究算法、机械学习和生物计算的小青年,我的CSDN博客是:一骑代码走天涯
如果您喜欢我的笔记,那么请点一下关注、点赞和收藏。如果內容有錯或者有改进的空间,也可以在评论让我知道。😄

题目&示例 (引用自 LeetCode)

按此进入题目链结

Remove all elements from a linked list of integers that have value val.

Example:

Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

解题思路

这题目,无可避免地必须遍历整张单链表,时间复杂度为 O( n n n),n是链表的长度。但是,我在做题的时候也考虑其他情況,比如输入的表是空表就自动返回原链表就行,还有 返回用的头节点如果数值和val一样,需要把头节点移到下一个有效的节点,而不是直接刪除就了事

以下就是我提交的代码,可以参考。

代码

时间复杂度:O( ​ n ​n n)
空间复杂度:O( 1 1 1)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        if head is None:
            return head
        # Settle head node, which should not equal val
        while head.val == val:
            head = head.next
            if head is None:
                return head
        # Iterate the list until reaching last node
        Curr = head
        while Curr.next is not None:
            if Curr.next.val == val:
                Curr.next = Curr.next.next
            else:
                Curr = Curr.next
        return head
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值