对单链表节点进行增删改查是最基本的操作,这篇博客将会来实现对节点的删除。其他的操作可参考《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语言实现单链表节点的删除(不带头结点)相关推荐

  1. 【408篇】C语言笔记-第十二章(单链表的删除考研真题实战)

    文章目录 第一节:单链表删除操作 第二节:考研真题 1. 解题设计 2. 代码实现 3. 时间复杂度分析 第一节:单链表删除操作 删除操作流程图: 通过流程图,我们写出代码: #include < ...

  2. c语言双链表排序交换节点_图解:单链表翻转的三种方式!

    当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行翻转. 单链表反转,反转后的效果如下: 看起来很简单,只需要将单链表所有结点的 nex ...

  3. C语言头插法尾插法创建单链表

    前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...

  4. 单链表创建及代码实现对单链表的操作

    链表:链表是一个有序的列表:是以节点的方式存储的,是链式存储:其中每一个节点包含data域,next域,next域指向下一个节点:链表的各个节点不一定是连续存放的:链表分带有头节点的链表和没有头节点的 ...

  5. 两个有序链表合并成一个有序的单链表

    将这两个有序链表合并成一个有序的单链表 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间 表中允许有重复数据 算法描述 (1)定义一个合并后的指针pc指向La表的头结点.由于要求不占 ...

  6. 单链表操作之合并两个单链表

    ***单链表操作之合并两个单链表*** /*  本篇博客为合并两个单链表, 有序和无序都可以: 其中用到单链表的尾插和单链表的选择排序: @单链表排序之选择排序链接:http://blog.csdn. ...

  7. C语言面向对象编程(五):单链表实现

    前面我们介绍了如何在 C 语言中引入面向对象语言的一些特性来进行面向对象编程,从本篇开始,我们使用前面提到的技巧,陆续实现几个例子,最后呢,会提供一个基本的 http server 实现(使用 lib ...

  8. c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)

    #include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...

  9. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...

  10. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

最新文章

  1. malloc、calloc、realloc的区别
  2. Java 异常基础 Exception
  3. 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多
  4. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数
  5. JSP中调用java类中的方法
  6. 6 - VC Bound (P[BAD]的真正上限)
  7. 以太坊 智能合约 代码 数据空间 存储在哪儿
  8. android 管理fragment,在 Fragment 之间传递数据
  9. makefile函数集锦
  10. 全网首发:为什么解码器长时间没有画面?如何解决?
  11. Matlab2017a/b激活license.lic文件
  12. 京东18年管培生—技术方向笔试有感
  13. 关于python搞笑段子精选_搞笑却有哲理的段子
  14. 不同系统mysql安装教程
  15. 接口文档编写步骤与格式
  16. 史上最详细唇语识别数据集综述
  17. 移动端和PC端的pdf预览与下载
  18. 60GHz通信标准简介
  19. JS判断安卓端或者苹果端并下载
  20. PS 命令之get-adgroupmember!

热门文章

  1. mysql暂停触发器_mysql如何临时禁用触发器
  2. 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!
  3. Google面试题——及答案
  4. Internet History, Technology, and Security(week5)——Technology: Internets and Packets
  5. Ubuntu mysql连接错误10060/10061的方法
  6. 定制kali linux
  7. 无法删除DLL文件解决方法(转)
  8. WEB前端技术趋势图示-JS库
  9. 继承练习 :开发一个系统时 需要对员工进行建模 员工包含3个属性 姓名 工号 工资 功能 work
  10. [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)