C语言中单链表操作:查找节点与删除节点

一. 简介

前面学习了C语言中创建链表节点,向链表中插入节点等操作,文章如下:

C语言中单向链表:创建节点与插入新节点-CSDN博客

本文继续学习c语言中对链表的其他操作,例如在链表中查找某个节点,删除链表中某个节点,遍历链表,释放链表等等操作。

二. C语言中单链表操作:查找节点与删除节点

1. 遍历链表

遍历链表就是依次访问链表中的每个节点,打印或者处理每个节点中的数据,下面示例遍历链表并输出每个节点中的数据:

//遍历链表
void traverse_list(Node* head) {Node* current = head;while(current != NULL) {printf("%d\n", current->data);current = current->next;}
}

1. 查找节点

查找节点具体就是在链表中查找指定值的节点。

//查找链表中指定数据所在的节点
Node* search_list_node(Node* head, int data) {Node* current = head;if(current == NULL) {return NULL;}while(current != NULL) {if(current->data == data) {return current;}current = current->next;}    return NULL;
}

2. 删除链表中的某个节点

删除节点可以删除头部节点、尾部节点或者指定位置的节点。

(1) 删除链表的头部节点

删除链表中的头部节点,只需要将头指针指向下一个节点,释放第一个节点即可:

//删除链表中的头部节点
Node* delete_at_list_head(Node* head) {if(head == NULL) {return NULL;}//保存当前头节点Node* tmp_p = head;//移动头指针到下一个节点head = head->next; //释放原来的头节点free(tmp_p);return head;
}

(2) 删除链表的尾部节点

删除链表的尾部节点时,需要遍历整个链表找到尾节点的前一个节点,将该节点的 next 置为 NULL,并释放掉尾节点。示例如下:

//删除链表中的尾部节点
Node* delete_at_list_tail(Node* head) {//如果链表为空if(head == NULL) {return NULL;}//如果链表只有一个节点if(head->next == NULL) {free(head);return NULL;}//查找链表尾节点的前一个节点(即倒数第二个节点)Node* tmp_p = head;while(tmp_p->next->next != NULL) {tmp_p = tmp_p->next;}//释放链表中最后一个节点free(tmp_p->next);//将倒数第二个节点的 next指针指向NULLtmp_p->next = NULL;return head;
}

(3) 删除链表中指定位置的节点

删除链表中指定位置节点时,首先需要遍历链表,找到目标节点的前一个节点,然后调节其 next指针跳过目标节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WePY 框架:小程序开发的“Vue式”利器!!!

WePY 框架:小程序开发的“Vue式”利器 🚀 哈喽,大家好!👋 今天我们要聊聊一个在微信小程序开发中大放异彩的框架——WePY!它是什么?有什么特点?为啥值得一试?别急&#…

什么是微前端?有什么好处?有哪一些方案?

微前端(Micro Frontends) 微前端是一种架构理念,借鉴了微服务的思想,将一个大型的前端应用拆分为多个独立、自治的子应用,每个子应用可以由不同团队、使用不同技术栈独立开发和部署,最终聚合为一个整体产品…

【家政平台开发(33)】库存管理模块开发实战:从基础搭建到智能管控

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Mysql个人笔记

Mysql个人笔记 sql基础书写规则和种类种类书写规则注释规则启动 DDL数据类型数据库的操作useshowcreatedrop 表的操作useshowcreate创建表复制表 dropalter Mysql的存储引擎 DMLselectselect语句like(谓词)where聚合函数:关于nullgroup byexi…

【重装系统】大白菜自制U盘装机,备份C盘数据,解决电脑启动黑屏/蓝屏

1. 准备 U 盘 U 盘容量至少 8G,备份 U 盘的数据(后期会格式化) 2. 从微软官网下载操作系统镜像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下载安装大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盘&#…

各类神经网络学习:(十)注意力机制(第2/4集),pytorch 中的多维注意力机制、自注意力机制、掩码自注意力机制、多头注意力机制

上一篇下一篇注意力机制(第1/4集)待编写 一、pytorch 中的多维注意力机制: 在 N L P NLP NLP 领域内,上述三个参数都是 向量 , 在 p y t o r c h pytorch pytorch 中参数向量会组成 矩阵 ,方便代码编写。…

uni-app初学

文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 小程序开发网址: 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下…

VBA将Word文档内容逐行写入Excel

如果你需要将Word文档的内容导入Excel工作表来进行数据加工,使用下面的代码可以实现: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL运行一段时间后磁盘出现100%读写

MySQL运行一段时间后磁盘出现100%读写的情况,可能是由多种原因导致的,以下是一些常见原因及解决方法: 可能的原因 1. 磁盘I/O压力过大[^0^]:数据量过大,数据库查询和写入操作消耗大量I/O资源。索引效率低&#xff0c…

【RabbitMQ】延迟队列

1.概述 延迟队列其实就是队列里的消息是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。 延时队列的使用场景: 1.订单在十分钟之内未支付则自动取消 2.新创建的店铺,…

Linux笔记之Ubuntu系统设置自动登录tty1界面

Ubuntu22.04系统 编辑getty配置文件 vim /etc/systemd/system/gettytty1.service.d/override.conf如果该目录或者文件不存在,进行创建。 在override.conf文件中进行编辑: [Service] ExecStart ExecStart-/sbin/agetty --autologin yourusername --no…

C++程序诗篇的灵动赋形:多态

文章目录 1.什么是多态?2.多态的语法实现2.1 虚函数2.2 多态的构成2.3 虚函数的重写2.3.1 协变2.3.2 析构函数的重写 2.4 override 和 final 3.抽象类4.多态原理4.1 虚函数表4.2 多态原理实现4.3 动态绑定与静态绑定 5.继承和多态常见的面试问题希望读者们多多三连支…

算法训练之动态规划(三)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

$_GET变量

$_GET 是一个超级全局变量,在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组,包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…

jQuery多库共存

在现代Web开发中,项目往往需要集成多种JavaScript库或框架来满足不同的功能需求。然而,当多个库同时使用时,可能会出现命名冲突、功能覆盖等问题。幸运的是,jQuery提供了一些机制来确保其可以与其他库和谐共存。本文将探讨如何实现…

MySQL 中的聚簇索引和非聚簇索引有什么区别?

MySQL 中的聚簇索引和非聚簇索引有什么区别? 1. 从不同存储引擎去考虑 在MySIAM存储引擎中,索引和数据是分开存储的,包括主键索引在内的所有索引都是“非聚簇”的,每个索引的叶子节点存储的是数据记录的物理地址(指针…

Java从入门到“放弃”(精通)之旅——启航①

🌟Java从入门到“放弃 ”精通之旅🚀 今天我将要带大家一起探索神奇的Java世界!希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ 🔥 Java是什么?为什么这么火? Java不仅仅是一门编程语言,更…

三相电为什么没零线也能通电

要理解三相电为什么没零线也能通电,就要从发电的原理说起 1、弧形磁铁中加入电枢,旋转切割磁感线会产生电流 随着电枢旋转的角度变化,电枢垂直切割磁感线 电枢垂直切割磁感线,此时会产生最大电压 当转到与磁感线平行时&#xf…

文件上传做题记录

1,[SWPUCTF 2021 新生赛]easyupload2.0 直接上传php 再试一下phtml 用蚁剑连发现连不上 那就只要命令执行了 2,[SWPUCTF 2021 新生赛]easyupload1.0 当然,直接上传一个php是不行的 phtml也不行,看下是不是前端验证,…

【Pandas】pandas DataFrame head

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行 pandas.DataFrame.head pandas.DataFrame.head 是一个方法,用于返回 DataFrame 的前几行。这个方法非常有用,特别是在需要快速查看 DataFrame 的前…