数据结构论坛

首页 » 分类 » 问答 » 数据结构干货单链表的基本操作之删除操作
TUhjnbcbe - 2024/9/30 8:57:00
#数据结构#

我们已经学习了数据结构中单链表的基本操作之一,插入操作,并对插入操作的定义,实现方式进行了一系列的说明讲解。接下来我们来学习单链表的另一个基本操作——删除操作。

删除操作具有两种方式,接下来我们分别介绍两种删除操作。

零基础Python数据结构教程、源码及视频淘宝¥2购买已下架

1、已知位序,按照位序,在单链表中删除对应数据

2、指定了结点,在单链表中删除对应的节点

(1)按位序删除(带头结点)

boolListDelete(LinkListL,inti,ElemTypee)

{if(i1)returnfalse;LNode*p;//指针p扫描到当前节点

intj=0;//当前指针p指向第几个节点

p=L;//单链表L指向头结点,带头结点,则假设头结点时第0个节点,该节点不存储数据元素

while(p!=NULLji-1)//p不指向空指针,并且循环扫描到第i-1个结点

{p=p-next;j++;}//指针逐一循环扫描

if(p==NULL)returnfalse;//当指针p指向空时,也就是i值不合法时,执行操作失败

if(p-next=NULL)returnfalse;//表明p指针指向的下一节点为空,也就是第i-1个结点之后的结点不存在

LNode*q=p-next;//假设q指向的节点为需要被删除的结点

e=q-data;//q指针指向的数据域也就是需要被删除的数据元素,存储到变量e当中

p-next=q-next;//将要删除的节点指针指向的指针域赋值给指针p,覆盖指针p原有的指针域,使得q结点从单链表中断开

free(q);//释放结点q的存储空间

returnture;}//删除节点成功

按位序执行删除操作时,需要考虑指针p扫描的位置是否合法,主要是单链表的首位位置,还要考虑单链表的长度,对需要删除的节点,该节点的指针域是要先保存下来的,也就是要保存一条连接线,保证要删除节点的前驱元素和后继元素能够正常连接,而不会出现不小心断开的情况。

(2删除指定节点p

删除指定节点p时,要注意指针p指向的节点是否为空,之后便是进行扫描与交换数据域,再之后就是进行断开释放空间等操作。

主要部分代码展示:

LNode*q=p-next;//令q指针指向*p的后继结点

p-data=p-next-data;//和后继结点交换数据域

1
查看完整版本: 数据结构干货单链表的基本操作之删除操作