当前位置: 首页 > news >正文

day137—链表—删除链表中的结点(LeetCode-237)

题目描述

有一个单链表的head,我们想删除它其中的一个节点node

给你一个需要删除的节点node。你将无法访问第一个节点head

链表的所有值都是唯一的,并且保证给定的节点node不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

  • 给定节点的值不应该存在于链表中。
  • 链表中的节点数应该减少 1。
  • node前面的所有值顺序相同。
  • node后面的所有值顺序相同。

自定义测试:

  • 对于输入,你应该提供整个链表head和要给出的节点nodenode不应该是链表的最后一个节点,而应该是链表中的一个实际节点。
  • 我们将构建链表,并将节点传递给你的函数。
  • 输出将是调用你函数后的整个链表。

示例 1:

输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

示例 2:

输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:指定链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9

提示:

  • 链表中节点的数目范围是[2, 1000]
  • -1000 <= Node.val <= 1000
  • 链表中每个节点的值都是唯一
  • 需要删除的节点node链表中的节点,且不是末尾节点

解决方案:

这段代码的核心功能是删除单链表中指定的节点(注意:传入的参数是待删除的节点本身,而非链表头节点或待删除节点的前驱节点),采用 “值覆盖 + 跳过后继节点” 的技巧实现,时间复杂度O(1)、空间复杂度O(1),是该特殊场景下的最优解法。

核心逻辑

常规删除链表节点需要找到前驱节点,但本题仅给出待删除节点(且该节点非尾节点),因此通过 “偷梁换柱” 的方式绕开前驱节点:

  1. 值覆盖:将待删除节点node的值替换为其下一个节点node->next的值;
  2. 跳过节点:将nodenext指针指向node->next->next,直接跳过原node->next节点;
  3. 最终效果等价于删除了原node节点(原node->next节点变为无引用状态,可被垃圾回收)。

总结

  1. 核心思路:利用 “值覆盖” 替代常规的 “指针调整”,解决无前驱节点时删除指定节点的问题;
  2. 适用条件:仅适用于待删除节点不是链表尾节点的场景(题目通常会保证这一点);
  3. 效率优势:无需遍历链表,仅两步操作完成删除,时间复杂度O(1),是该场景下的最优解。

函数源码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void deleteNode(ListNode* node) { node->val=node->next->val; node->next=node->next->next; } };
http://www.jsqmd.com/news/259667/

相关文章:

  • GESP认证C++编程真题解析 | 202409 二级
  • 洛谷 P2725:[USACO3.1] 邮票 Stamps ← BFS
  • 六.循环问题
  • Apache Atlas vs DataHub:主流数据目录工具对比评测
  • 基于Java+SpringBoot+Vue医院药品管理系统【附源码+文档+部署视频+讲解】Python,Django,php,Flask,node.js,SSM,JSP,微信小程序,大数据技术
  • 汽车零配件检测实验室LIMS便捷的系统应用实践
  • python实现信件详细信息爬取
  • 拒绝“PPT 造芯”,边缘 AI 芯片 IP 厂商 Quadric 拿下 3000 万美元 C 轮
  • 基于Java+SpringBoot+Vue的大学生房屋租赁系统【附源码+文档+部署视频+讲解】Python,Django,php,Flask,node.js,SSM,JSP,微信小程序,大数据技术
  • 计算机Java毕设实战-基于Javaspringboot的博客系统基于springboot的博客系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 基于Java+SpringBoot+Vue的城市花园维修小区管理【附源码+文档+部署视频+讲解】Python,Django,php,Flask,node.js,SSM,JSP,微信小程序,大数据技术
  • Java毕设选题推荐:基于vue的博客分享发布系统基于springboot的博客系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 集体好奇心如何提升团队适应能力
  • 【计算机毕业设计案例】基于python-CNN卷神经网络训练识别手势方向
  • 详细介绍:Java 中 NIO 和IO 的区别
  • LVGL 双缓冲机制深入技术讲解
  • LeeCode_693. 交替位二进制数
  • java的AES加密算法和RSA非对称加密算法
  • 图的基本概念
  • 物联网数据中台建设方法论与实践
  • 探寻不锈钢管板好货源?2026年国内厂家推荐,高温合金法兰/压力容器法兰/非标法兰/双相钢法兰,不锈钢管板公司有哪些 - 品牌推荐师
  • java-ssm324医院预约挂号系统vue问诊 失信 投诉-springboot
  • 一篇文章看懂 spring-boot-starter-web 的 POM 配置与 compile 作用域
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络训练识别不同颜色的裤子识别
  • 2026年目前服务好的双相钢法兰供应商选哪家,不锈钢法兰/双相钢法兰/非标法兰/变压器法兰,双相钢法兰直销厂家排行 - 品牌推荐师
  • Maven 依赖作用域实战避坑指南
  • 2026年目前做得好的变压器法兰品牌有哪些,不锈钢管板/压力容器法兰/不锈钢法兰/法兰/船用法兰,变压器法兰厂家推荐 - 品牌推荐师
  • 深度学习毕设项目推荐-基于python-CNN-pytorch训练识别苹果树叶病害识别
  • 企业估值中的可穿戴设备市场评估
  • 10 分钟使用 OrchardCore 快速构建 .NET 内容管理系统(CMS)