单链表销毁时,最后一句L=NULL是什么意思?

作者&投稿:邴览 (若有异议请与网页底部的电邮联系)
单链表中L->next=s ; 和L=s;的区别 ,其中L是头指针,初始L=null,~

根据链表的结构来分析~
struct Link{
int data;
struct *next;
};

然后我们定义一个 链表 Link L=NULL; 这句话的意思就说,我定义了一个指针 L,L指向内存中以Link 结构形式开辟的一块空间的地址,当你将NULL赋值给L,表示L不指向空间的任何位置。即,我们定义了一个空链表。

L->next 是典型的用指针访问数据的形式,L->next=s表示将s的地址记录进L的指针域中,而L=s则是将s的地址给L,行为是舍弃头节点,将s作为新的头节点。

如果你移动了头指针,那么头指针新位置之前的所有节点都将丢失,一般移动头节点都发生在销毁链表的时候,否则不会轻易的移动头指针,不过如果你是自定义的指针让他指向头节点,那是没关系的。。。。

希望对你有帮助哦~

带头节点时等于把链表置空,不带等于在L表中,除第一个元素外删除其他元素。

L是一个指针,它指向一个内存空间,这个空间虽然释放了,但是L仍然指向那个地址。置L为 "空"是避免误调用。

手工置空 避免发生误调 指针是不安全的


如何在c++里删除某一文件指定段落
将文件内容读出,保存在内存,就可按要求删除某些行,然后再将内容保存到原来的文件。以下是示例程序:注意修改文件名路径,如果与lz的实际不符。pragma warning(disable:4786)include <iostream> include <string> include <vector> include <fstream> using namespace std;const char *filename = "pz....

程序退出时 malloc 申请的内存会自动释放吗
当然会,所谓内存泄露,指的是在程序运行期间,申请的空间没有得到释放.系统会认为这块空间一直被占用,从而导致可用空间实际上减少了.

链表操作
图书的链表结构: typedef struct Book { char BookName[50]; char Author[20]; char Press[50]; char ISBN[20]; float Price; int Number; }Book; typedef struct LNode{ Book data; Struct LNode *next;}LNode,*LinkList;1.2、图书的入库则是顺序表或链表的插入操作(可以插入到最后一个位置)。2、...

问答题5.解释带头结点的单链表和不带头结点的单链表的区别。
2、在删除和插入操作中,无论删除和插入的位置如何,带头结点的链表不需要修改头指针的值,而不带头结点的有时候需要。在清空操作中,带头结点的保留头结点,而不带头结点的要销毁。3、在结构上,带头结点的单链表,不管链表是否为空,均含有一个头结点,不带头结点的单链表不含头结点。4、在操作上。

c语言销毁栈的函数。大家看看写的对不?
这两个函数一个是销毁栈DestroyStack,一个是清空栈ClearStack 销毁是把整个栈都释放掉,清空只是把栈里元素清除。因为你的栈元素是int型基本变量,所以栈元素内容是直接存放在栈空间的,并没有另外申请内存保存栈元素,所以在从栈里移除栈元素时,不需要调用free函数。实际上你的DestroyStack可以很直接的...

急解一个数据结构的题(C语言)
\/* 一串结点链接在线性链表L的最后一个结点之后,并改变链表L的尾指针指向新 *\/ \/* 的尾结点 *\/ int i=1; (*L).tail->next=s; while(s->next) { s=s->next; i++; } (*L).tail=s; (*L).len+=i; return OK; } Position PriorPos(LinkList L,Link p) { \/* 已知p指向线性链表L中的...

c语言求解 建立链表程序。当输入0时表示链表输入结束,0不计入该链表...
return; } while(list->next) list=list->next; node=list_node_new(data); if(!node) return -1; list->next=node; return 0;}\/\/销毁链表void list_destory(LIST *list){ LIST *temp; while(list) { temp=list; list=list->next;...

在对链队列作出队操作时,会改变其头指针的值吗?为什么?
这时候队列就是空队列了。所以头尾指针可能都要修改。假设head是指向队列的头结点指针,p为与duhead同类型的指针,那么head->next指向zhi的是队列的首结点,那dao么出队的操作为 p = head->next;\/\/指向欲出队的结点 head->next = p->next;\/\/这一步不能少 free(p);\/\/销毁队首节点 ...

数据结构调用函数时,InitList(&L) DestroyList(&L) ClearList(&L) Lis...
根据实现函数的不一样,用&L的是取地址操作,用L的表示对结构体直接操作

阻塞队列和线程池原理
非公平性是对先等待的线程是非公平的,当队列可用时,阻塞的线程都可以争夺访问队列的资格,有可能先阻塞的线程最后才访问队列。初始化时有参数可以设置 是一个用链表实现的有界阻塞队列。此队列的默认和最大长度为Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序。 PriorityBlockingQueue是一个支持优先级的...

怀集县17161513159: 单链表中L - >next=s;和L=s;的区别,其中L是头指针,初始L=null, -
隆变倍顺: 希望对你有帮助!L是指针,L=s代表L的值赋值为s,L->next=s表示L所指向对象的next成员的值赋值为s.如果L=NULL,那么L->next=s将会发生非法访问,属于未定义行为,具体行为视编译器和操作系统有所不用,不过现在的操作系统多数运行在保护模式下,这种非法访问会导致程序直接被操作系统结束掉.

怀集县17161513159: C语言单向循环链表在删除最后一个节点时有错误卡顿 -
隆变倍顺: temp=p; p=p->next; temp->next=NULL; 这三句存在问题,temp=p,让temp指向p所指向的节点,p=p->next,p指向后移 temp->next=NULL,让temp的后继为空,这里出了问题,链表从temp指向的节点断开,相当于删除p之后的所有节点.应该先判断p是不是最后节点 if(p->next==NULL) 如果是,只好去找p的前趋pre,让pre->next=NULL,free(p) 如果不是最后节点,将p的后继节点数值域复制给p,然后将p的后继节点删除,等同与删除p p->data=p->next->data; p->next=p->next->next; free(p);

怀集县17161513159: 算法与数据结构,单链表,删除最后一个元素.下面c语言程序是我自己写的,然后中运行也是没问题的,的确 -
隆变倍顺: 不知道你说的删除是什么意思,是将整个节点都free还是只是把data置为Null.从你给的代码来看,并没有free掉最后一个节点.因为当从while循环跳出来后,指针p已经是指向最后一个了,所以p->next是Null,所以你最后一行free(p->next)实际上没有起作用的.如果你想真正删除最后一个节点,将while循环的条件改为while(p->next&&p->next->next)即可,同时注意最后一个元素的链表删除的情况.

怀集县17161513159: C语言的链表销毁,free出错求解 -
隆变倍顺: 你这个销毁函数本身没有问题,它是正确的,问题产生的根源在你的链表生成函数.你的链表生成函数的入参是一个指针,作为形参,你能改变它指向的东西,但是不能改变形参本身体.也就是说,你在链表创建函数类生成了链表,但是出了这...

怀集县17161513159: 销毁单链表问题 -
隆变倍顺: while循环中,p指向最后一个结点时,执行一次,free(p)释放p的空间,但下面来那个剧仍旧执行了,但q->next已经为空,所以报错.你改为do……while()格式. do{p=q; q=q->next; free(p); }while(p); 应该是你的最后一个节点的next没有指空null.

怀集县17161513159: c语言销*(毁链表为什么一定要用二级指针,新手求教 -
隆变倍顺: 请注意最后一行的:*ph=NULL; 这里删除链表之后,还需要把链表的头指针置为NULL 如果这个函数的参数只是一个一级的指针,那么在函数中就没办法把链表的头指针给置为NULL了,因为C里面函数调用时,参数是传值的,传进来的一级指针和原来链表的头指针虽然具有相同的值,但是却保存在两个不同的内存单元,这时即使修改了函数里的头指针的值,外面链表的头指针却是没有收到任何影响.

怀集县17161513159: 如何删除单链表的尾结点?是用p - next - next=null还是先找到尾结 -
隆变倍顺: 设两个指针就好了..void delete(LinkList &L){ LNode *p=L; LNode *q; while(p->next!=NULL){ q=p; p=p->next; } q->next=NULL; delete(p);}

怀集县17161513159: 数据结构线性表问题:删除单链表的最后一个结点需要置其前驱节点的指针域为null,故需要的时间复杂度 -
隆变倍顺: 因为需要一个一个的找,才能找到最后一个结点的前驱.也就是要数n-1个结点,才能判定哪一个是最后一个结点的前驱,所以算法时间复杂度为O(n)

怀集县17161513159: c语言链表问题求解~当对表里最后一个结点删除的时候会出错 -
隆变倍顺: 问题出现在这个循环里 while(p->next!=NULL) { while(p->next->data==e) { q=p->next; p->next=q->next; free(q); count++; } p=p->next; } 你的链表是有头结点的链表,假设表中只有头结点和一个节点X,这个节点等于e,现在来一步步分析:首先,...

怀集县17161513159: c++创建链表 -
隆变倍顺: #include"malloc.h"using namespace std;struct LinkList{ int data; LinkList *next;};void CreateList_L(LinkList *&L,int n){ int i; LinkList *p; L=(LinkList...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网