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

Leetcode_203.移除链表元素—C语言

目录

❣️1.题目❣️

❣️2.解答❣️

💞方法一:暴力法

💞方法二: 尾插法

💞方法三:哨兵位法


❣️1.题目❣️

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 列表中的节点数目在范围 [0, 104] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

❣️2.解答❣️

💞方法一:暴力法

算法思路:

遍历链表,如果当前节点的值等于val,则删除该节点,并且修改前驱节点的next指针指向后继节点。如果当前节点的值不等于val,则将前驱节点指向当前节点,当前节点指向下一个节点。

具体实现:

使用两个指针prev和cur,分别指向前驱节点和当前节点。开始遍历前,先初始化prev为NULL,cur为head,即第一个节点。然后进行while循环,当cur指向NULL时停止。在循环中,如果cur指向的节点的值等于val,则删除该节点,将后继节点指针保存在next中。如果prev不为NULL,则修改prev的next指针指向next;否则,说明删除的是头节点,直接修改head为next。最后,将cur指向next,继续下一轮循环。如果cur指向的节点的值不等于val,则将prev指向cur,cur指向下一个节点。最后,返回head指针。

需要注意的是,在删除节点后,需要使用free函数释放该节点的内存空间。

struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* prev = NULL;struct ListNode* cur = head;//while(cur !=NULL)while (cur){if (cur->val == val){struct ListNode* next = cur->next;free(cur);if (prev)prev->next = next;elsehead = next;cur = next;}else{prev = cur;cur = cur->next;}}return head;
}

💞方法二: 尾插法

首先定义了三个指针:newhead、tail 和 cur,其中 newhead 和 tail 用于构建新的链表,cur 用于遍历原链表。初始时,newhead 和 tail 都指向 NULL,cur 指向原链表的头结点 head。

然后进入 while 循环,循环条件为 cur 不为 NULL。在循环体中,首先判断 cur 的值是否等于 val,如果等于,说明需要删除该节点,因此先将该节点的空间释放,然后将 cur 指向下一个节点。如果不等于,说明该节点需要保留,因此将该节点从原链表中取下来,并使用尾插法将其插入到新链表的尾部。具体地,若 tail 为 NULL,则说明此时新链表还没有节点,因此将 newhead 和 tail 都指向当前节点;否则,将当前节点插入到 tail 的后面,并更新 tail 指向新的尾节点。最后, cur 指向下一个节点,继续进行循环。

当循环结束时,所有不等于 val 的节点都已经被插入到了新链表中。此时需要检查一下 tail 是否为空,如果不为空,则将 tail 的 next 指针置为 NULL,表示新链表的最后一个节点已经插入完毕。最后,返回新链表的头结点 newhead。

struct ListNode*removeElements(struct ListNode* head,int val)
{
struct ListNode*newhead =NULL,*tail=NULL;
struct ListNode*cur =head;
while(cur)
{
//不是val的节点取下来尾插
if(cur->val !=val)
{
//尾插
if(tail ==NULL)
newhead =tail =cur;
else
{
tail->next =cur;
tail=tail->next;
}
cur =cur->next;
}
else
{
struct ListNode*tmp =cur;
cur =cur->next;
free(tmp);
}
}
if(tail)
tail->next =NULL;
return newhead;
}

💞方法三:哨兵位法

首先定义一个哨兵位,作为新链表的头节点,同时也是一个尾指针,用于删除操作后将尾部节点的next指针置为NULL。

接下来遍历链表,如果当前节点的值不是val,则将其从原链表取下来,尾插到新链表中;如果当前节点的值是val,则将其从原链表中删除。

最后,将哨兵位删除,返回新链表的头节点即可。

struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* newhead = NULL,*tail = NULL;
struct ListNode* cur = head;
// 哨兵位
newhead = tail =(struct ListNode*)malloc(sizeof(struct ListNode));
while(cur)
{
// 不是va1的节点取下来尾插
if(cur->val != val)
{
// 尾插
tail->next = cur;
tail = tail->next;
cur = cur->next;
}
else
{
struct ListNode* tmp = cur;
cur = cur->next;
free(tmp);
}
}
tail->next = NULL;
struct ListNode* tmp = newhead;newhead = newhead->next;
free(tmp);return newhead;
}

相关文章:

Leetcode_203.移除链表元素—C语言

目录 ❣️1.题目❣️ ❣️2.解答❣️ &#x1f49e;方法一&#xff1a;暴力法 &#x1f49e;方法二&#xff1a; 尾插法 &#x1f49e;方法三&#xff1a;哨兵位法 ❣️1.题目❣️ 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.va…...

虹科方案 | 汽车电子电气架构设计仿真解决方案

来源&#xff1a;虹科汽车电子 虹科方案 | 汽车电子电气架构设计仿真解决方案 导读 本文将介绍面向服务&#xff08;SOA&#xff09;的汽车TSN网络架构&#xff0c;并探讨RTaW-Pegase仿真与设计软件在TSN网络设计中的应用。通过RTaW将设计问题分解&#xff0c;我们可以更好地理…...

Java6种单例模式写法

单例模式 某个类任何情况下只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。Java6种单例模式&#xff1a;2种懒汉式&#xff0c;2种饿汉式 &#xff0c;静态内部类 &#xff0c;枚举类懒汉式 synchronized延迟加载 public class Singleton {private static Sing…...

Direct3D拾取

假设在屏幕上单击&#xff0c;击中的位置为点s(x,y)。由图可以看出&#xff0c;用户选中了茶壶。但是仅给出点s&#xff0c;应用程序还无法立即判断出茶壶是否被选中。所以针对这类问题&#xff0c;我们需要采用一项称为“拾 取(Picking)”的技术。 茶壶和屏幕点s之间的一种联…...

大洋钻探系列之二IODP 342航次是干什么的?(上)

本文简单介绍一下大洋钻探IODP 342航次&#xff0c;从中&#xff0c;我们一窥大洋钻探航次的风采。 IODP342的航次报告在网络上可以下载&#xff0c;英文名字叫《Integrated Ocean Drilling ProgramExpedition 342 Preliminary Report》&#xff0c;航次研究的主要内容是纽芬兰…...

离散时间系统模型

离散时间系统模型 离散时间系统模型是表示数字滤波器的方案。MATLAB 科学计算环境支持若干种离散时间系统模型&#xff0c;这些模型将在以下章节中介绍&#xff1a; ​传递函数零极点增益状态空间部分分式展开式&#xff08;残差形式&#xff09;二阶节 (SOS)格型结构体卷积矩…...

Nginx学习(在 Docker 中使用 Nginx)

1. 安装Nginx 使用 docker pull nginx 下载最新的 Nginx Docker 镜像。 下载完毕后&#xff0c;使用 docker run -d -p 80:80 --name nginx nginx&#xff0c;即可启动 Nginx 容器。其中&#xff0c;-p 80:80 表示将容器的 80 端口映射到 主机的 80 端口&#xff1b;--name ng…...

【Java】集合(一)单列集合List

1.集合 可以动态保存任意多个对象&#xff0c;并提供了一系列的操作对象的方法&#xff1a;add、remove、set、get等。 2.集合框架体系 分为两大类&#xff1a; 单列集合和双列集合 3.List接口基本介绍 List接口是Collection接口的子接口 List集合类中元素有序&#xff0…...

实战 | 基于卷积神经网络的蘑菇识别微信小程序

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.11.13 Last edited: 2023.11.13 导读&#xff1a;其实没啥难的&#xff0c;主要是随手搞了就发出来把&#xff0c;太久没有水过帖子了&…...

如何选择共享wifi项目服务商,需要注意哪些?

在移动互联网时代&#xff0c;无线网络已经成为人们生活中不可或缺的一部分。随着5G时代的到来&#xff0c;共享WiFi项目成为了市场上备受关注的焦点。在众多共享WiFi公司中&#xff0c;如何选择共享wifi项目服务商合作&#xff0c;今天我们就来盘点下哪些公司可靠&#xff01;…...

ubuntu20.04 MYNTEYE S 相机运行与标定记录

ubuntu20.04 MYNTEYE S 相机运行与标定记录 环境 ubuntu20.04 opencv3.3.1 硬件 mynteye S1030 OpenCV 3.4.3 安装 Jetson Nano小觅相机(MYNT EYE S)开发调试指南 mkdir -p ~/tools/opencv cd ~/tools/opencvgit clone https://github.com/opencv/opencv.git cd opencv/…...

有效降低数据库存储成本方案与实践 | 京东云技术团队

背景 随着平台的不断壮大&#xff0c;业务的不断发展&#xff0c;后端系统的数据量、存储所使用的硬件成本也逐年递增。从发展的眼光看&#xff0c;业务与系统要想健康的发展&#xff0c;成本增加的问题必须重视起来。目前业界普遍认同开源节流大方向&#xff0c;很多企业部门…...

分布式数据库Schema 变更 in F1 TiDB

分布式数据库Schema 变更 in F1 & TiDB 【转载】TiDB 源码阅读系列文章&#xff08;十七&#xff09;DDL 源码解析 | PingCAP 上述文章主要叙述了从DDL语句发起到执行的过程&#xff0c;简单介绍了弄一套相同的模式来后台处理数据回填&#xff0c;从而提高DDL的并发度的一…...

图形库篇 | EasyX | 图像处理

图形库篇 | EasyX | 图像处理 图像类型 IMAGE表示图像,用于定义一个图像变量,与导入的图片资源一一对应。 IMAGE img;加载与绘制图像 函数功能函数加载图像void loadimage(IMAGE* pDstImg,LPCTSTR pImgFile,int nwidth = 0,int nHeight = 0,bool bResize = false)绘制图像v…...

AWTK UI 自动化测试工具发布

AWTK UI 自动化 提供了兼容 Appium 的接口&#xff0c;可以使用 Appium 的工具来进行 UI 自动化测试。但是使用起来有点麻烦&#xff0c;用的人不多&#xff0c;所以最终决定开发一个 AWTK 专用的 UI 自动化测试工具。相比 Appium&#xff0c;这个工具有下列特点&#xff1a; …...

Java后端开发——JDBC入门实验

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言中用于与数据库建立连接并进行数据库操作的API&#xff08;应用程序编程接口&#xff09;。JDBC允许开发人员连接到数据库&#xff0c;执行各种操作&#xff08;如插入、更新、删除和查询数据&#xff09…...

LCA

定义 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 性质 如果 不为 的祖先并且 不为 的祖先&#xff0c;那么 分别处于 的两棵不同子树中&#…...

ts学习02-数据类型

新建index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </h…...

javaSE的发展历史以及openjdk和oracleJdk

1 JavaSE 的发展历史 1.1 Java 语言的介绍 SUN 公司在 1991 年成立了一个称为绿色计划&#xff08;Green Project&#xff09;的项目&#xff0c;由 James Gosling&#xff08;高斯林&#xff09;博士领导&#xff0c;绿色计划的目的是开发一种能够在各种消费性电子产品&…...

【入门Flink】- 10基于时间的双流联合(join)

统计固定时间内两条流数据的匹配情况&#xff0c;需要自定义来实现——可以用窗口&#xff08;window&#xff09;来表示。为了更方便地实现基于时间的合流操作&#xff0c;Flink 的 DataStrema API 提供了内置的 join 算子。 窗口联结&#xff08;Window Join&#xff09; 一…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...