数据结构论坛

首页 » 分类 » 常识 » 数据结构单链表实现删除链表结点
TUhjnbcbe - 2024/9/2 16:41:00

单链表中可以指定删除其中的一个链表结点,如下图所示是一个链表

如果删除其中的3号结点,该如何操作?简单来说,分为以下几个步骤

(1)找到3号结点

(2)将2号和4号结点链接。

(3)释放3号结点

具体如何来进行操作

(1)如何找到3号结点

通过上述的图示,3号结点的地址存储在2号结点的指针域中,因此在输入删除结点的序号时,需要先找到删除结点的前一个结点。如删除3号结点,则先找到2号结点。

(2)如何将2号和4号结点链接

2号结点的指针域原本存储的是3号结点的地址,删除3号结点,2号结点需要存储4号结点的地址。4号结点的地址存储在3号结点的指针域中,因此将3号结点的指针域赋值给2号结点的指针域,就可以将2号和4号结点链接起来。

(3)如何释放3号结点

C语言中采用free()函数释放内存,但需要注意,应先将3号结点的地址存储在临时变量中,再使用free()函数释放。

上述说明删除结点的过程,如下是代码实现。

下面来分析具体的代码

(1)函数声明

StatusListDelete(LinkListL,inti)

函数类型:函数类型为Status,Status是通过typedef定义的int的别名,其实可以定义为int类型,或者bool类型

函数参数:LinkListL为所传入的链表,inti是需要删除的结点序号。

(2)定义了两个变量p和q,其中p变量初始化指向头结点,接着循环过程中指向要删除的结点,q变量临时存储删除结点的地址。

(3)while循环中的循环条件(p-next)(ji-1)。p-next等价于p-next!=NULL;ji-1中i是要删除结点的序号,i-1即为前一个结点,如删除3号结点,需要将指针移动到2号结点。

while循环中p=p-next的作用是将指针p移动至删除的结点

(4)if语句

if(!(p-next)

(ji-1))returnERROR;

在将指针p移动到删除结点过程中,可能存在空表,删除结点序号非法这样的情况,需要使用if语句返回ERROR。

(4)删除结点的操作

q=p-next;p-next=q-next;

假设删除的是3号结点,指针p已指向了前一个结点,即2号结点。此时删除结点的操作

q=p-next

p-next的地址为3号结点的地址,将其赋值给临时变量q

p-next=q-next

q-next相当于p-next-next,p-next的地址为3号结点的地址,p-next-next为4号结点的地址,将其赋值给p-next,相当于把2号和4号结点链接起来。

(5)释放删除的结点,free(q)。

1
查看完整版本: 数据结构单链表实现删除链表结点