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

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


🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。
🚁 个人主页:不 良
🔥 系列专栏:🛸剑指 Offer  
📕 学习格言:博观而约取,厚积而薄发
🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同成长! 🌹


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

题目:

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

返回删除后的链表的头节点。

示例1:

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

示例2:

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

说明:

  • 题目保证链表中节点的值互不相同

  • 若使用 C 或 C++ 语言,你不需要 freedelete 被删除的节点

思路一:

双指针法。因为题目中保证链表中节点的值互不相同,所以我们可以通过比较链表中节点值是否和val相等来删除节点。

链表头节点为空的情况就不再细说,直接返回nullptr

情况1.先判断头节点是否等于val,如果等于val直接返回头节点的下一个节点即返回head->next

image-20230528184348754

情况2.如果头节点不等于val,则设置两个节点prevcur分别记录上一个节点和当前节点,如果cur节点的值等于val,则让prev节点的next指针指向cur节点的下一个节点即prev->next = cur -> next

image-20230528184400511

情况3.如果cur节点的值不等于val,则通过prev = cur;cur = cur->next;继续向后遍历链表直至当cur为空。

image-20230528184409446

代码如下:

class Solution {
public:ListNode* deleteNode(ListNode* head, int val) {//判断头节点是否为空,此步可以省略,并不影响提交if(head == nullptr)return nullptr;//当head->val等于val时,返回head节点的下一个节点if(head->val == val){head = head->next;return head;}ListNode* cur = head;//当前节点ListNode* prev = head; //上一个节点while(cur){//当节点值等于val时,让prev节点的next指针指向cur节点的下一个节点if(cur->val == val){prev->next = cur->next;//这里用break或者return head;都可以//return head;break;}//如果不相等,则继续向后遍历prev = cur;cur = cur->next;}return head;}
};

时间复杂度:O(N)
空间复杂度:O(1)

http://www.lryc.cn/news/91106.html

相关文章:

  • WiFi 6 vs WiFi 5
  • PHP语言基础
  • 怎么用Excel VBA写一个excel批量合并的程序?
  • WuThreat身份安全云-TVD每日漏洞情报-2023-05-22
  • Eclipse教程 Ⅵ
  • Seaborn.load_dataset()加载数据集失败最佳解决方法
  • java 区分缺陷Defects/感染Infections/失败Failure
  • 如何学习R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合?
  • 分布式锁的应用场景与分布式锁实现(二):基于Redis实现分布式锁
  • 【JavaSE】Java基础语法(四十二):NIO
  • Linux---systemctl
  • 零钱兑换,凑零钱问题,从暴力递归到动态规划(java)
  • Vue登录界面精美模板分享
  • Linux设备驱动程序(二)——建立和运行模块
  • 【算法】单调栈问题
  • Hack The Box - 关卡Dancing
  • 【软件设计与体系结构】 软件体系结构风格
  • detectron2 使用教程
  • 哈希表常用数据结构
  • Java字节流
  • arm3399主板-使用ubuntu20.04搭建LVS-DR(netplan)
  • Go中同/异步与锁的应用~~sync包
  • Flask知识点2
  • R语言生物群落(生态)数据统计分析与绘图(从数据整理到分析结果展示)
  • 代码随想录训练营Day58| 739. 每日温度 496.下一个更大元素 I
  • 设计模式-命令模式
  • 软考——下午题部分,例题一,二,三,六
  • 关于render: h => h(App)的解释
  • flask实现简易图书管理系统
  • 2021 年全国大学生物联网设计竞赛(华为杯)全国总决赛获奖名单