【中等】力扣算法题解析LeetCode237:删除链表中的节点

关注文末推广名片,即可免费获得本题测试源码

题目来源:LeetCode237:删除链表中的节点

问题抽象:在单链表中删除指定节点(非尾节点),仅提供待删除节点引用(无头节点访问),需满足以下核心需求:

  1. 删除规则

    • 待删除节点 node 不是尾节点(题目保证);
    • 操作后,链表中不再包含 node 节点,且前后节点逻辑连接正确;
    • 禁止访问头节点,仅能操作 node 及其后继节点。
  2. 实现约束

    • 时间复杂度 O(1)(仅常数次指针操作);
    • 空间复杂度 O(1)(无额外数据结构);
    • 核心技巧
      • node 的值替换为其后继节点的值;
      • nodenext 指针绕过后继节点,直接指向后继的后继节点。
  3. 边界与副作用

    • 原后继节点被隐式删除(内存泄漏由语言 GC 管理);
    • 若链表仅两节点(node 为头节点):
      • 删除后链表仅剩原后继节点(值已复制到 node);
    • 节点值类型为整数(32 位有符号整数)。

输入:单链表中的节点 node(待删除节点)
输出:无(直接修改链表结构)


解题思路

由于无法访问链表头节点,不能通过遍历定位前驱节点。核心思路是:

  1. 值覆盖:将当前节点的值替换为下一个节点的值
  2. 节点跳过:将当前节点的 next 指向下下个节点
  3. 效果等价
    • 当前节点值被覆盖 → 原值从链表中消失
    • 跳过下一节点 → 链表长度减 1
    • 前后节点顺序保持不变

示例推导:

  • 输入 [4,5,1,9], 删除 5
    • 覆盖值:节点 5 → 节点 1 的值 → 链表变为 [4,1,1,9]
    • 跳过节点:节点 1(第一个)指向 9 → 链表变为 [4,1,9]

代码实现(Java版)🔥点击下载源码

class Solution {
    public void deleteNode(ListNode node) {
        // 将下一个节点的值覆盖到当前节点
        node.val = node.next.val;
        // 当前节点直接指向下下个节点
        node.next = node.next.next;
    }
}

代码说明

  1. 值覆盖
    node.val = node.next.val → 当前节点值被替换为后继节点值,使原值从链表中消失
  2. 节点跳过
    node.next = node.next.next → 当前节点直接连接下下个节点,跳过原后继节点
  3. 关键点
    • 题目保证 node 不是尾节点 → 可安全访问 node.next
    • 节点值唯一 → 覆盖值不会冲突
    • 内存高效 → 无额外空间开销,仅修改指针

提交详情(执行用时、内存消耗)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达文汐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值