如何在链表中删除一个节点?

推荐答案

-- -------------------- ---- -------
----- ---------
    --- -------------- ------ -----------
        -------- - ---
        --------- - ----

--- -----------------
    -- ---- -- ---- -- --------- -- -----
        ------
    -------- - -------------
    --------- - --------------
展开代码

本题详细解读

问题描述

在链表中删除一个节点,通常我们只给出要删除的节点本身,而不是链表的头节点。这意味着我们无法直接访问该节点的前一个节点。

解题思路

由于我们无法访问前一个节点,因此无法直接通过修改前一个节点的 next 指针来删除当前节点。我们可以通过以下步骤来间接删除节点:

  1. 复制下一个节点的值:将当前节点的值替换为下一个节点的值。
  2. 删除下一个节点:将当前节点的 next 指针指向下一个节点的下一个节点。

代码解析

  • ListNode 类定义了链表节点的结构,包含 val(节点的值)和 next(指向下一个节点的指针)。
  • deleteNode 函数接受一个节点作为参数,表示要删除的节点。
    • 首先检查节点是否为空或是否为链表的最后一个节点。如果是,则直接返回,因为无法删除。
    • 然后将当前节点的值替换为下一个节点的值。
    • 最后将当前节点的 next 指针指向下一个节点的下一个节点,从而跳过下一个节点,达到删除的效果。

注意事项

  • 这种方法不适用于删除链表的最后一个节点,因为无法通过复制下一个节点的值来删除最后一个节点。
  • 如果链表只有一个节点,且要删除该节点,则无法使用此方法。

时间复杂度

  • 时间复杂度为 O(1),因为我们只需要进行常数次操作来删除节点。

空间复杂度

  • 空间复杂度为 O(1),因为我们没有使用额外的空间。
纠错
反馈

纠错反馈