python-leetcode-删除链表的中间节点

部署运行你感兴趣的模型镜像

2095. 删除链表的中间节点 - 力扣(LeetCode)

可以使用快慢指针的方法来找到并删除链表的中间节点:

思路:

  1. 使用快慢指针找到中间节点
    • 快指针 fast 每次走两步
    • 慢指针 slow 每次走一步
    • fast 走到链表末尾时,slow 就指向了中间节点
  2. 删除中间节点
    • slow 的前一个节点的 next 指向 slow.next
    • 需要一个 prev 指针来跟踪 slow 的前一个节点
  3. 边界情况
    • 如果链表长度为 1,直接返回 None

代码实现:

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

def deleteMiddle(head: ListNode) -> ListNode:
    if not head or not head.next:
        return None  # 只有一个节点时,删除后返回 None

    slow, fast = head, head
    prev = None  # 记录 slow 的前一个节点

    while fast and fast.next:
        prev = slow
        slow = slow.next
        fast = fast.next.next  # 快指针走两步,慢指针走一步

    # 删除中间节点
    prev.next = slow.next
    return head

示例测试

def print_list(head):
    while head:
        print(head.val, end=" -> ")
        head = head.next
    print("None")

# 创建链表 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
print_list(deleteMiddle(head))  # 输出: 1 -> 2 -> 4 -> 5 -> None

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

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值