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

剑指offer-76、删除链表的节点

题⽬描述

给定单向链表的头指针和⼀个要删除的节点的值,定义⼀个函数删除该节点。返回删除后的链表的头节点。

  1. 此题对⽐原题有改动
  2. 题⽬保证链表中节点的值互不相同
  3. 该题只会输出返回的链表和结果做对⽐,所以若使⽤ C 或 C++ 语⾔,你不需要 free 或 delete 被删除的节点

数据范围:

  • 0<=链表节点值<=10000
  • 0<=链表⻓度<=10000

示例1

输⼊:{2,5,1,9},5
返回值:{2,1,9}
说明:给定你链表中值为 5 的第⼆个节点,那么在调⽤了你的函数之后,该链表应变为 2 -> 1 -> 9

示例2

输⼊:{2,5,1,9},1
返回值:{2,5,9}
说明:给定你链表中值为 1 的第三个节点,那么在调⽤了你的函数之后,该链表应变为 2 -> 5 -> 9

思路及解答

虚拟头节点

如果要删除链表⾥⾯的⼀个节点,其实就是将前置节点的next 直接指向当前节点的后置节点,这样在链表中再也找不到该节点了,也就是相当于删除了。

假设有⼀个链表,我们需要删除⾥⾯的 5 :

⾸先需要判断链表头结点是不是为空,如果为空,那么就直接返回NULL ,如果等于我们要找的,那么直接返回下⼀个节点引⽤即可。

如果不符合以上说的,那么我们需要新建⼀个前置节点pre ,与现在的链表连接在⼀起:

然后初始化⼀个 cur 节点表示当前节点,指向 head 节点:

cur 不为空, cur 和 pre 后移:

发现 cur 正是我们需要查找的 5 ,那么记录下 5 的下⼀个节点 1 ,也就是next :

cur 的 next 指向 NULL ,使⽤ pre 的 next 指向刚刚记录的 next :

简化链表也就是:

取之前虚拟的头结点的后⼀个节点,就是删除掉之后的新链表:

class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;}
}public class Solution13 {public ListNode deleteNode(ListNode head, int val) {if (head == null) {return null;}if (head.val == val) {return head.next;}// ⽤⼀个节点将头结点链接起来ListNode pre = new ListNode(-1);pre.next = head;ListNode cur = head;ListNode next = null;while (cur != null) {if (cur.val == val) {// 将前置节点直接连接后⼀个节点,相当于删除掉了该节点pre.next = cur.next;break;}cur = cur.next;pre = pre.next;}return head;}
}

迭代

通过遍历链表找到目标节点并修改指针,维护前驱指针,当找到目标节点时修改指针跳过该节点

public class Solution {public ListNode deleteNode(ListNode head, int val) {// 处理头节点就是要删除的节点的情况if (head != null && head.val == val) {return head.next;}ListNode prev = null;ListNode curr = head;// 遍历查找目标节点while (curr != null && curr.val != val) {prev = curr;curr = curr.next;}// 找到目标节点后跳过它if (curr != null) {prev.next = curr.next;}return head;}
}
  • 时间复杂度:O(n),最坏情况下需要遍历整个链表
  • 空间复杂度:O(1),只使用常数空间

递归

当前节点是要删除的节点则返回next,否则递归处理剩余链表

public class Solution {public ListNode deleteNode(ListNode head, int val) {// 递归终止条件if (head == null) {return null;}// 当前节点是要删除的节点if (head.val == val) {return head.next;}// 递归处理剩余链表head.next = deleteNode(head.next, val);return head;}
}
  • 时间复杂度:O(n),需要处理每个节点
  • 空间复杂度:O(n),递归调用栈的深度
http://www.jsqmd.com/news/373201/

相关文章:

  • 国内品质可靠楼梯踏步砖品牌推荐 - 资讯焦点
  • 计算机科学:95%的置信区间的临界值为什么是1.96?
  • NMN十大抗衰老品牌排行产品推荐,NMN哪个牌子效果好?2026全球用户实测数据对比 - 资讯焦点
  • NeurIPS 2025 Spotlight | 具身智能「安全锁」来了!北大杨耀东团队提出SafeVLA,事故率骤降83%
  • 2026年靠谱的毛粘胶带/胶带高评分品牌推荐(畅销) - 品牌宣传支持者
  • 新手必看!3款最易上手的公众号SVG排版工具深度测评丨微信编辑器推荐 - peipei33
  • NeurIPS 2025 | 时空基础模型新范式FactoST:从“联合苦训“到“先通后专“
  • 支付宝消费券回收靠谱平台推荐 - 京顺回收
  • 2026年ASME锁环式快开盲板/压力环式快开盲板值得信赖厂家推荐(精选) - 品牌宣传支持者
  • 《数据分析方法手册》:定义、价值、思路、全流程实操指南、数据分析方法常用总结及案例···(附相关材料下载)
  • Cursor点燃个人开发者,企业级AI为何频频受挫?Agent工厂从提效工具到AI员工的跃迁
  • ItemsSource和Command绑定DataContext
  • NAD+哪个牌子效果最好?2026年口碑最热门款NMN抗衰产品,NMN产品效果能力推动排名提升 - 资讯焦点
  • 从人机环境系统智能的视角看CodeBrain-1
  • 国家八部门重磅发文:AI重塑招投标,你的查重工具能跟上时代吗? - 资讯焦点
  • 人机与卦象
  • NMN品牌推荐十款榜单,NMN哪个品牌效果好?2026年十大NMN品牌深度解析,科学选择不走弯路 - 资讯焦点
  • CCF GESP 5级 完整大纲 + 洛谷刷题总表【from 黄老师】
  • 广东民间大巴不仅杠高铁,连城际铁路都能杠,民间大巴实在太顽强
  • 2000万台!iPhone17一骑绝尘,国人抛弃国产手机投入苹果怀抱,库克笑哈哈
  • 广东民间大巴太厉害,高铁首次开通24小时运营,竞争促进服务提升
  • 电车销量崩跌,在于口碑已坏,换电池12万太吓人,翻身不易,燃油车的优势获得认可
  • 2026年2月国内旅游必打卡路线实战报告:主流经典路线热度指数及体验价值对比 - 品牌推荐
  • 固态电池吹牛无底线,美国电车4680干电池刺穿遮羞布
  • 2026年知名的无线脚踏开关/防水脚踏开关厂家推荐与采购指南 - 品牌宣传支持者
  • Linus 官宣迈入 Linux 7.0 时代!开启内核开发新纪元
  • 实战教程 | React Native for OpenHarmony 之 Video播放列表功能
  • 2026年知名的UL认证钮子开关/3C认证钮子开关优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 2026年国内旅游必打卡路线十大规划:权威评测与经典景点深度解析 - 品牌推荐
  • 2026年比较好的对焊不锈钢法兰/304不锈钢法兰.用户好评厂家推荐 - 品牌宣传支持者