C语言链表中的P!=NULL是不是指当指针P指到链表中的最后一个结点时结束循环?
如果存在空头结点:
p->next
head
->next
如果不存在空头结点:
p->next
head
判断空链表的条件是:
head==head->next;
rear==rear->next;
扩展资料:
用尾指针rear表示的单循环链表对开始结点a1和终端结点an查找时间都是O(1)。而表的操作常常是在表的首尾位置上进行,因此,实用中多采用尾指针表示单循环链表。
在单链表中,从一已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。
是把指向下一个节点的指针置为null,也就说当前节点就是链表的末尾节点。
是p指向最后一个节点的下一个节点循环才结束。因为最后一个节点 p不等于NULL,而最后一个节点的next为NULL,所以是最后一个节点的next。
NULL为空,就是空指针的意思,它实际指向了一个不存在的位置。P!=NULL就是说当P不为空的时候继续循环,指向空的时候停止循环
C语言 链表 程序的相关问题 p = h->next; h->next = p;区别是什么 ?还...
其次,指针链表操作,每一本基础语法书上都有详细讲解,比这里两句话说的明白的多,类似的例子会在书上专门讲解,建议基础问题看书。最后,逻辑上确实绕混,r = q->next; q->next = p;p = q;q = r; 这其实是实现了指针链表中两个相邻节点的位置互换。逻辑上有点像汉诺塔,r这个临时变量...
c++ 链表中P=head, P->next=s , s=p的含义?
我想上面的代码应该是在建立链表时需要的。比如有下面的数据结构:struct Node{int a;struct Node *next;};链表中一般都有头结点,就是head,其中可以存放数据,也可以不存放数据。在动态建立链表的过程中,肯定需要定义一个新的结点,比如pNext。pNext=(struct Node *)malloc(sizeof(struct Node));...
C语言链表中q->next=p;表示什么意思?
q->next = p; 表示将节点p加入到节点q之后。意思:使当前指针指向链表的下一个结点。一般作用在数据结构中的单链表里由应用,语句中的p一般指向一个结构体类型的数据,此类型的数据通常表示节点;结构体里存放的一些数据和记录下一个节点地址的指针变量next;这个next就好比链条一样,连接着一个个节点...
链表中已经有p->next=s了,为啥还要p=s?
p是p,p->next是p->next。p的下一个节点(p->next)指向s,此时p->next相当于最后一个节点,p=s是要让下一次能再接一个节点,如此循环。
数据结构(C语言)题:循环单链表L中,指针P所指结点为尾结点的条件是...
如果存在空头结点:p->next head ->next 如果不存在空头结点:p->next head 判断空链表的条件是:head==head->next;rear==rear->next;
C语言链表中s->next=p;s=p什么意思
假设s指向链表的最后一个节点,因为s指向的节点是最后一个,所以s->next是NULL。假设这时需要将一个新节点p插在链表的结尾,很明显我们需要让最后一个节点指向p,于是s->next=p;就可以让最后一个节点指向p,这时p就是最后一个节点。s=p就是将s指向p,也就是s这时候指向的还是最后一个节点。
c语言p=L;是什么意思,还有p=L->next;是什么意思,这两个语句有什么区别...
而链表的话只需要修改插入位置前的节点的指针就可以了。你这里的两个语句都是简单的赋值,p = L;就是把让自己定义的Node p = 头结点,而p = L->next就是让p = 头结点的后一个节点。这里 ->是结构体中的运算符,表示使用这个结构体中的某个指针变量。
C语言链表中可以将各个结点中的值集合成数组吗 p=head; ib[n++]=...
可以,就是遍历链表,把需要的数据取出来,为什么不可以
单链表中return 指针p是什么意思?
返回p的值,也就是链表的地址。
c语言链表问题,提示 '*p' is a pointer; did you mean to use '->...
加上typedef后,Pode等价于struct node *。所以Pode *p表示的是struct node **p,即二级指针。直接使用Pode p即可。
产歪板蓝: 请看: 在C中NULL是这样定义的: #difine NULL 0; 所以: p!=NULL表示p不等于空; p!=0也表示p为空; 二者没有什么区别;
旌德县15887798976: C语言中 int *p=NULL; 则这条语句是不是错的? *p=0 - ?
产歪板蓝: C语言中int *p=NULL意思是: C语言中p里面是随机值,在int *p=NULL,这个p是有值的,为NULL; int *p=NULL指向一个空指针,等于 int *p=0; NULL等于0;可以随时让这个p指向其他地址.定义指针,将它初始化为NULL,这样做编程更规范...
旌德县15887798976: C语言链表输出,while(p)是什么意思?怎么判断完成输入了? - ?
产歪板蓝: while(p) 等价于 while(p!=NULL) 如果p不指向NULL,那么就是没有到达结尾,那么就执行循环体中的printf()
旌德县15887798976: C语言中while(p)和while(*p)有何区别? - ?
产歪板蓝: while(p) 等价于while(p!=NULL) 检查的是p值是不是NULL 而while(*p) 相当于while( *p != 0) 检查的是p所指向的地址中的数据是否为0,但前提是p不能为NULL,所以,你的程序在使用while(*p)时,会出错!在你这个代码中,会体现为编译出错!
旌德县15887798976: C语言中的while(p!=NULL)语句,这个p指针是不是自动往后走啊,没有++p和P++ - ?
产歪板蓝: 不会自动往后走的.这种情况下一般也不会简单地加,多半是做链表之类结构的遍历,p=p->next之类的语句.
旌德县15887798976: C语言中int *p=NULL是什么意思 - ?
产歪板蓝: 楼上说的都对,看来你是新手,建议你去看林锐的《高质量C++》,这本书,你一定会喜欢的,因为他对于入门者来说特别好,他会给你讲正确的编程规范是什么.其中那块讲指针的部分就写了,定义指针,一般先给初始化,用NULL来初始化它,避免野指针.你这里说的int *p,这个p里面是随机值,而int *p=NULL,这个p是有值的,为NULL.这其实对程序也没有啥贡献,在后面你也可以随时让这个p指向别的地址.定义指针,顺便将它初始化为NULL,这样做编程更规范.
旌德县15887798976: C语言,free(p)后,是否一定要再加一句p=NULL才算是内存释放完成了??多谢多谢! - ?
产歪板蓝: 不是这样的,释放p,并不是指p的内存释放,而是指p所指向的内存释放,而且释放是指对所指向的内存空间不提供读写的权限而已.当你释放p所指向的内存之后,变量p中一定还存放着地址,如果所指向的内存空间被释放掉了,在*运算的话就没有权限,会提示出错.所以为避免这种错误,一般将释放掉而又没重新赋值的指针赋值为空(NULL)使他不指向任何内存空间.
旌德县15887798976: Java描述中,链表中节点 p==null,具体代表什么情况? p.next和p.data都为空( - ?
产歪板蓝: 为null是指这个p不存在,单纯是一个空的,就没有next和data.
旌德县15887798976: C语言链表中释放内存函数的问题,请高手解答. - ?
产歪板蓝: 首先你要搞明白,List本身已经被定义为Node*类型,因此List*实际上是一个二级指针你的疑问中,如果改成*list = p->next,运行应该是可以通过的.但是不推荐这样做.为什么呢?这就要先理解FreeMem这个函数,为什么用List*做参数,而...
旌德县15887798976: 300分求解 C语言之链表(讲解)?
产歪板蓝: 从各个位置插入数据就是优势、、因为插入数据在实际应用中是非常常见的 而要在数组中插入数据的话 只要不是在末尾 就需要大量地移动元素位置 效率低下 头指针是指向由自己创建的第一个节点 这个节点可以是有数据的节点 也可以是没有数...