python-leetcode-203. 移除链表元素

203. 移除链表元素

可以使用迭代方法来删除链表中所有值等于 val 的节点。以下是 Python 代码实现:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def remove_elements(head: ListNode, val: int) -> ListNode:
    dummy = ListNode(0)  # 创建虚拟头节点
    dummy.next = head
    prev, curr = dummy, head
    
    while curr:
        if curr.val == val:
            prev.next = curr.next  # 跳过当前节点
        else:
            prev = curr  # 仅在未删除节点时移动 prev
        curr = curr.next  # 移动到下一个节点
    
    return dummy.next  # 返回新的头节点

代码解析:

  1. 使用虚拟头节点 (dummy)
    • 这样可以方便删除原头节点,无需特殊处理。
  2. 双指针遍历 (prevcurr)
    • curr 负责遍历整个链表。
    • prev 记录 curr 的前驱节点,以便跳过目标节点。
  3. 删除节点的逻辑
    • 如果 curr.val == val,直接跳过当前节点 (prev.next = curr.next)。
    • 如果 curr.val != val,则移动 prev 指针。

时间 & 空间复杂度:

  • 时间复杂度: O(n) (遍历整个链表一次)
  • 空间复杂度: O(1) (仅使用了常数级别的额外空间)

这样就能高效地删除链表中所有等于 val 的节点!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值