关于单链表的删除算法

问题描述

关于单链表的删除算法

typedef int ElemType;
typedef struct Node //结点结构
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;

Status ListDelete(LinkList *L,int i,ElemType *e) //单链表删除
{
int j; LinkList p,q; p = *L; j = 1;
while (p->next && j < i)
{ p = p->next; ++j;}
if (!(p->next) || j > i)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->data; //?????没明白这句作用
free(q);

return OK;
}

就是注释的那句实在想不明白是干嘛用的,求解~~~

解决方案

注意看你传进去的最后一个参数 ElemType *e 这个明显是传进去的一个指针对吧 传指针进去的话 在结构体里面做的那些操作对参数e是有影响的 那句话的意思明显是为了在删除之前把数值提取出来并传入你的mian函数的

解决方案二:

单链表的插入与删除算法
单链表插入与删除算法
单链表 算法(删除中间节点)

解决方案三:

保存一下q的data值

时间: 2024-11-03 13:26:33

关于单链表的删除算法的相关文章

3.8.2单链表的删除

        现在我们再来看单链表的删除.设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可(如图3-8-5所示).         我们所要做的,只是实际上就是一步,p->next=p->next->next,用q来取代p->next,即是 q=p->next; p->next=q->next;         解读这两句代码,也就是说让p的后继的后继结点改成p的后继结点.有点拗口呀,那我再打个形象

数据结构之自建算法库——循环单链表

本文针对数据结构基础系列网络课程(2):线性表中第13课时循环链表. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 双链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:clinklist.h,包含定义双链表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef CLINKLIST_H_INCLUDED #define CLINKLIST_H_INCLUDED //循环单链表基本运算函数 typedef int Elem

数据结构之自建算法库——单链表

本文针对数据结构基础系列网络课程(2):线性表中第10课时单链表基本操作的实现,建立单链表数据存储结构基本操作的算法库. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 单链表算法库算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:linklist.h,包含定义顺序表数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef LINKLIST_H_INCLUDED #define LINKLIST_H_INCLUDED typedef

为什么不允许删除循环单链表中最后一个结点?如何解决?

问题描述 为什么不允许删除循环单链表中最后一个结点?如何解决? /*****************************************************/ /* 函数功能:建立一个空的循环单链表 / / 函数参数:无 / / 函数返回值:指向node类型变量的指针 / / 文件名:clnkinit.c,函数名init() / /****************************************************/ node init() /建立一个空的循环

单链表-数据结构 在线等。

问题描述 数据结构 在线等. 在带头结点的单链表中,若被删除结点位置概率相等,则删除第i个结点的时间复杂度是? 解决方案 O(1) 单链表只需要改变指针赋值的几个基本操作就可以完成删除单个结点,所以是O(1) 解决方案二: O(n) 查找需要的时间是O(n),删除是O(1),所以是O(n) 解决方案三: O1,直接就能删除- 解决方案四: 时间复杂度是On,因为查找的时间复杂度是On,删除的时间复杂度是O1,所以删除一个单链表节点的时间复杂度还是On 解决方案五: 在一个具有n个节点的单链表中删

用C语言实现单链表的各种操作(一)_C 语言

最近,从新复习了一下数据结构中比较重要的几个部分,现在把自己的成果记录下来,主要就是仿照严蔚敏的<数据结构>(C 语言版),中的例子和后面的习题进行改编的.首先,是单链表的各种实现,其中,包含了一些常考的知识点.例如,单链表的逆置,单链表的合并,找到单链表的中间节点等的算法实现.下面这个是单链表的结构体的定义: 复制代码 代码如下: typedef struct LNode{ ElemType data; struct LNode *next;}LinkList; 下面的基本的单链表的操作:其

艾伟_转载:C#版数据结构之--线性表的链式存储(单链表)

1.单链表的定义和由来: 链表是用一组地址可能连续也可能不连续的存储单元来存储线性表中的数据元素,在存储数据元素时,除了要存储数据元素本身之外,还要存储与它相邻的数据元素的地址信息,这两部分组成了线性表中一个数据元素的映像,称之为"结点",存储数据元素本身的部分称之为:数据域,存储相邻数据元素地址的部分称之为:地址域,所有节点通过地址域链接起来,像一个链条,故用此种方式存储的线性表称之为:链表.如果节点的地址域只存储了数据元素的直接后继的存储地址,则称这种链表为:单链表. 与数序表相比

数据结构模版----单链表实现方式总结

数据结构模版----单链表实现方式总结 前面我们提供了四种方式实现的单链表,有带头结点的不带头结点的,而单链表的结构体定义也有两种方式,那么这些实现方式,到底有什么区别呢,为什么会出现这么多种实现方式呢,下面我们就来细细体会 一 单链表结构体的实现区别 首先我们对比一下,单链表结构体 不同方式的单链表实现时,链表结点的实现是相同的,不同之处在于单链表结构体的实现上 单链表结构体的实现 [cpp] view plain copy print? typedef int ElemType;      

数据结构的C++实现之线性表之链式存储结构以及单链表反转

为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一 个指示其直接后继的信息(即直接后继的存储位置).这两部分信息组成数据元素ai的存储映像,称为结点(Node).N个 结点链结成一个链表,即为线性表(a1,a2,...,an)的链式存储结构,因为此链表的每个节点中只包含一个指针域,所以叫 做单链表. 我们把链表中的第一个结点的存储位置叫做头指针,,为了更方便地对链表进行操作,如删除第一个结 点的特殊情况(第一个结点没有前驱,而要摘除一