【LeetCode】剑指 Offer 18. 删除链表的节点

文章目录

  • 【LeetCode】剑指 Offer 18. 删除链表的节点
  • 一、双指针

一、双指针

本题删除值为 val 的结点需分为两步:

  1. 定位结点:遍历链表,直到 head.val == val
  2. 修改引用:设结点 cur 的前驱结点为 pre,后继节点为 cur.next;则执行 pre.next = cur.next,即可实现删除 cur 结点


算法流程:

  1. 特例处理:删除的结点时头结点时,直接返回 head.next
  2. 初始化:pre = head,cur = head.next
  3. 定位结点:当 cur 为空或 cur 节点值等于 val 时跳出
    1. 保存当前结点索引,即 pre = cur
    2. 遍历下一结点,即 cur = cur.next
  4. 删除结点:若 cur 指向某结点,则执行 pre.next = cur.next;若 cur 指向 null,代表链表中不包含值为 val 的结点
  5. 返回值:返回链表头部结点 head 即可
class Solution{public ListNode deleteNode(ListNode head, int val){if(head.val == val) return head.next;ListNode pre = head;ListNode cur = head.next;while(cur != null && cur.val != val){pre = cur;cur = cur.next;}if(cur != null) pre.next = cur.next;return head;}
}
  • 时间复杂度 O(n):n 为链表长度,删除操作平均需循环 n/2 次,最差 n 次
  • 空间复杂度 O(1):cur,pre 占用常数大小额外空间

【LeetCode】剑指 Offer 18. 删除链表的节点相关推荐

  1. c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现

    求: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...

  2. 【算法】剑指 Offer 18. 删除链表的节点

    1.概述 剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: he ...

  3. 【剑指 Offe】剑指 Offer 18. 删除链表的节点

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...

  4. 【0ms优化】剑指 Offer 18. 删除链表的节点

    立志用最少的代码做最高效的表达 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5, ...

  5. LeetCode-剑指 Offer 18. 删除链表的节点

    剑指 Offer 18. 删除链表的节点 思路:用一个头节点,以及pre,cur双指针 /*** Definition for singly-linked list.* struct ListNode ...

  6. 剑指offer:删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  7. python删除链表中重复的节点_剑指offer:删除链表中重复的节点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  8. 《剑指offer》删除链表中重复的节点

    题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...

  9. 剑指offer之删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

最新文章

  1. Node.js连接MySQL
  2. MySQL-数据类型
  3. 汇编语言学习——第四章 第一个汇编程序
  4. 双11“新贵”红星美凯龙:数据中台充分给足转型马力
  5. SSAS的MDX语句整理
  6. 无人驾驶(ncnn学习)
  7. web操作日志丢失_分享:有赞百亿级日志系统架构设计
  8. html雪花特效卡盟,吃鸡卡盟忍者必需死3 12月忍界试卷谜底一览
  9. 《网站推荐》音乐下载, 系统下载
  10. DNS污染,配置DNS
  11. 不知足者常乐:SAP云在中国的落地
  12. 如何才能使自己看懂英文文献
  13. Win8系统mscomctl.ocx缺失的解决方法 run-time error 339
  14. 【算力网络】算力网络的发展愿景及目标
  15. 如何在Power BI Desktop中创建词云生成器
  16. 我对2021年前端团队的规划
  17. (2.1)关系模型之关系结构和约束
  18. 2004年中国企业自主创新宣言
  19. 科技让教育更美好:跟谁学更名高途,重新定义教育场景
  20. 从数据中台到全链路数据生产力

热门文章

  1. java工商银行项目_ChaosBlade 在工商银行混沌工程体系中的应用实践
  2. python函数返回布尔值_python-3.x - 函数不返回正确的布尔值 - SO中文参考 - www.soinside.com...
  3. JQuery LazyLoad实现图片延迟加载-探究
  4. 字符串 不是有效的 AllXsd 值。
  5. (转)oracle表分区详解
  6. 首页终于让百度放出来了
  7. 生成汉字拼音首字母函数!
  8. 华为路由器http诊断失败_高端家庭的标配,华为路由Q2 Pro是路由器中的吴彦祖...
  9. 如何使用Windows OVERLAPPED优化你的应用
  10. (45)FPGA同步复位与异步复位(同步复位)