我们已经学习了数据结构中单链表的基本操作之一,插入操作,并对插入操作的定义,实现方式进行了一系列的说明讲解。接下来我们来学习单链表的另一个基本操作——删除操作。
删除操作具有两种方式,接下来我们分别介绍两种删除操作。
零基础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;//和后继结点交换数据域