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

【刷题】203. 移除链表元素

203. 移除链表元素

  • 一、题目描述
  • 二、示例
  • 三、实现
    • 方法1-找到前一个节点修改next指向
    • 方法2-不是val的尾插重构
  • 总结


203. 移除链表元素

一、题目描述

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

二、示例

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

输入:head = [], val = 1
输出:[]

三、实现

方法1-找到前一个节点修改next指向

找到值为val的前一个节点,然后链接到val的后一个节点,再把val删除

struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* prev = NULL, * cur = head;while (cur) {if (cur->val == val) {if (prev) {// 2.cur->val为valprev->next = cur->next;free(cur);cur = prev->next;}else {// 0.删除val开头的链表cur = head->next;free(head);head = cur;}}else {// 1.遍历链表,直到cur为空,或者cur->val为valprev = cur;cur = cur->next;}}return head;
}

方法2-不是val的尾插重构

遍历当前链表,把不是val的节点拿下来尾插。

struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur = head;struct ListNode* newhead = NULL, * tail = NULL;while (cur) {if (cur->val != val) {// 1.不为val的节点以尾插PushBack的方式重新构建链表if (!tail) {// 1.1尾插第一个元素newhead = tail = cur; }else {// 1.2尾插tail->next = cur;tail = tail->next;}cur = cur->next;}else {// 2.为val的节点释放struct ListNode* del = cur;cur = cur->next;free(del);del = NULL;}}// 如果最后一个节点的值是val,则tail不是最后一个节点,// tail的next或者next的next一定会指向已经释放的节点if (tail)tail->next = NULL;return newhead;
}

总结

再次回顾单链表实现时,尾插的细节分析,注意尾插时需要考虑链表为空的情况。

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

相关文章:

  • C++11学习- CPU多核与多线程、并行与并发
  • docker登录harbor、K8s拉取镜像报http: server gave HTTP response to HTTPS client
  • Redis在linux下安装
  • 这里有你想知道的那些卖家友好型跨境电商平台!
  • 架构中如何建设共识
  • 力扣(LeetCode)1172. 餐盘栈(C++)
  • 详细说一下DotNet Core 、DotNet5、DotNet6和DotNet7的简介和区别
  • 基于MBD的控制系统建模与仿真软件工具集
  • QML动画分组(Grouped Animations)
  • 探索未来的数字人生:全景VR数字人
  • 计算机基础 -- 硬件篇
  • 【高危】Apache Superset <2.1.0 认证绕过漏洞(POC)(CVE-2023-27524)
  • vue3如果用setup写如何获取类似于vue2中的this
  • 关于 API接口的一些知识分享
  • 【ROS仿真实战】Gazebo仿真平台介绍及安装方法(一)
  • Lychee图床 - 本地配置属于自己的相册管理系统并远程访问
  • VP记录:Codeforces Round 865 (Div. 2) A~C
  • 智能学习 | MATLAB实现PSO-SVM多输入单输出回归预测(粒子群算法优化支持向量机)
  • Java后端:html转pdf实战笔记
  • 设计模式-适配器模式
  • 一款支持全文检索、工作流审批、知识图谱的企事业知识库
  • SAP MRP例外信息解释
  • 广义的S变换
  • python异常及其捕获
  • mysql实现存在则保存,不存在则更新
  • MCU固件升级系列1(STM32)
  • ImageJ 用户手册——第五部分(菜单命令Window)
  • 利用css实现视差滚动和抖动效果
  • 以桨为楫 修己度人(一)
  • 网络编程之简单socket通信