c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)
对单链表节点进行增删改查是最基本的操作,这篇博客将会来实现对节点的删除。其他的操作可参考《C语言实现链表的基本操作》这篇博客。删除某个节点有两个类型:
(1)删除i某个位置的节点;
(2)判断x值是否在链表中,若存在则删除该节点;
实例代码已经上传至 https://github.com/chenyufeng1991/DeleteLinkedList 。
核心代码如下:
//删除pos位置的节点
Node *deletePosElement(Node *pNode,int pos){
//需要一个头结点来维护
Node *pHead;
Node *pMove;
int i = 1;
if (pos <= 0 || pos > sizeList(pNode)) {
printf("%s函数执行,输入pos值非法,删除节点失败\n",__FUNCTION__);
return NULL;
}
pHead = pNode;
pMove = pNode;
//单独考虑删除第一个节点
if (pos == 1) {
pMove = pMove->next;
pNode = pMove;
free(pHead);
printf("%s函数执行,删除pos=1位置元素成功\n",__FUNCTION__);
return pNode;
}
while (pMove != NULL) {
if (i == pos - 1) {
break;
}
i++;
pMove = pMove->next;
}
free(pMove->next);
pMove->next = pMove->next->next;
printf("%s函数执行,删除pos=%d位置元素成功\n",__FUNCTION__,pos);
return pNode;
}
//判断x值是否在链表中,若存在则删除该节点
Node *deleteXElement(Node *pNode,int x){
//一前一后两个指针,pMovePre是pMove的前一个节点
Node *pMovePre;
Node *pMove;
if (pNode == NULL) {
printf("%s函数执行,链表为空,删除x=%d失败\n",__FUNCTION__,x);
return NULL;
}
pMovePre = pNode;
pMove = pMovePre->next;
//单独考虑第一个节点
if (pMovePre->element == x) {
pNode = pMove;
free(pMovePre);
return pNode;
}
while (pMove != NULL) {
if (pMove->element == x) {
//找到该节点的前一个节点
pMovePre->next = pMove->next;
free(pMove);
break;
}
//同步前进
pMove = pMove->next;
pMovePre = pMovePre->next;
}
if (pMove == NULL) {
printf("%s函数执行,不存在x=%d,删除数据失败\n",__FUNCTION__,x);
return pNode;
}
printf("%s函数执行,删除x=%d成功\n",__FUNCTION__,x);
return pNode;
}
c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)相关推荐
- 【408篇】C语言笔记-第十二章(单链表的删除考研真题实战)
文章目录 第一节:单链表删除操作 第二节:考研真题 1. 解题设计 2. 代码实现 3. 时间复杂度分析 第一节:单链表删除操作 删除操作流程图: 通过流程图,我们写出代码: #include < ...
- c语言双链表排序交换节点_图解:单链表翻转的三种方式!
当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行翻转. 单链表反转,反转后的效果如下: 看起来很简单,只需要将单链表所有结点的 nex ...
- C语言头插法尾插法创建单链表
前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...
- 单链表创建及代码实现对单链表的操作
链表:链表是一个有序的列表:是以节点的方式存储的,是链式存储:其中每一个节点包含data域,next域,next域指向下一个节点:链表的各个节点不一定是连续存放的:链表分带有头节点的链表和没有头节点的 ...
- 两个有序链表合并成一个有序的单链表
将这两个有序链表合并成一个有序的单链表 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间 表中允许有重复数据 算法描述 (1)定义一个合并后的指针pc指向La表的头结点.由于要求不占 ...
- 单链表操作之合并两个单链表
***单链表操作之合并两个单链表*** /* 本篇博客为合并两个单链表, 有序和无序都可以: 其中用到单链表的尾插和单链表的选择排序: @单链表排序之选择排序链接:http://blog.csdn. ...
- C语言面向对象编程(五):单链表实现
前面我们介绍了如何在 C 语言中引入面向对象语言的一些特性来进行面向对象编程,从本篇开始,我们使用前面提到的技巧,陆续实现几个例子,最后呢,会提供一个基本的 http server 实现(使用 lib ...
- c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)
#include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...
- python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...
- java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...
转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...
最新文章
- malloc、calloc、realloc的区别
- Java 异常基础 Exception
- 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多
- 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数
- JSP中调用java类中的方法
- 6 - VC Bound (P[BAD]的真正上限)
- 以太坊 智能合约 代码 数据空间 存储在哪儿
- android 管理fragment,在 Fragment 之间传递数据
- makefile函数集锦
- 全网首发:为什么解码器长时间没有画面?如何解决?
- Matlab2017a/b激活license.lic文件
- 京东18年管培生—技术方向笔试有感
- 关于python搞笑段子精选_搞笑却有哲理的段子
- 不同系统mysql安装教程
- 接口文档编写步骤与格式
- 史上最详细唇语识别数据集综述
- 移动端和PC端的pdf预览与下载
- 60GHz通信标准简介
- JS判断安卓端或者苹果端并下载
- PS 命令之get-adgroupmember!
热门文章
- mysql暂停触发器_mysql如何临时禁用触发器
- 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!
- Google面试题——及答案
- Internet History, Technology, and Security(week5)——Technology: Internets and Packets
- Ubuntu mysql连接错误10060/10061的方法
- 定制kali linux
- 无法删除DLL文件解决方法(转)
- WEB前端技术趋势图示-JS库
- 继承练习 :开发一个系统时 	需要对员工进行建模 员工包含3个属性 姓名 工号 工资 功能 work
- [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)