数据结构(C语言):删除单链表中值为x的所有结点
·
一、题目
有些应用中允许线性表中存在有值相同的数据元素,设计一个算法,删除单链表中值为x的所有结点。
本题所使用的数据结构定义如下:typedef int ElemType ;
typedef int ElemType ;
单链表的数据结构定义:
typedef struct Lnode
{ ElemType data; /* 数据域,保存数据元素(结点的值) */
struct Lnode *next; /* 指针域 */
}LinkList; /* 结点的类型 */
二、算法思路
1、定义指向首元结点的指针p,定义指向头结点的指针q,声明指针q为后续存放数据域与x相同的结点地址。
2、判断链表是否为空表,若为空表,则进行下一步操作。
3、若指针p不为空,则判断p->是否与x相等。
4、若p->与x相等,则将q指向要删除的结点,将指针p向后移动一个结点,改变pre指针域的指向,使q从链表中删除,释放q。
5、若p->与x不相等,将指针p向后移动一个结点,将指针pre向后移动一个结点。
6、重复345步骤,直到p为空为止。
三、程序实现
void Delete(LinkList* L, ElemType x) {
// L为带头结点的链表
LinkList* p = L->next, * pre = L, *q;
if (p == NULL)
{
printf("链表为空!\n");
return;
}
while (p) {
if (p->data == x) {
q = p; // 让q指向p(要删除的结点)
p = p->next; // 将指针p向后移动一个结点
pre->next = p; // 改变pre指针域的指向,使q从链表中删除
free(q); // 释放q(要删除的结点)
}
else {
pre = p; // pre向下后移
p = p->next; // p与pre同步向后移,这两步不能调换顺序
}
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)