链表就地逆置p->next=head->next意思

作者&投稿:贾宏 (若有异议请与网页底部的电邮联系)
带头单链表逆置,下面程序有错吗?p=head->next;q=p->next;什么意思?~

完全不对,你自己在图上画一画不就知道是什么意思了,看不懂这什么意思

p->next=head;下一节点至空
head=p;新建p节点作为头节点

注意head每次指向哪个节点
head->next总是指向已经经过逆置的最后一个节点,也就是新的经过逆置的头节点
所以每次完成一个新的节点的逆置,要将其next指向上一个逆置的节点,刚好是head->next指向的节点
比如原来有链表 A->B->C->D->NULL
开始head->next = A, head->next->next=B
首先让p=A,并让A->next=NULL, 也就是让A成为尾节点
然后q指向B,此时head->next还是指向A的,也就是刚刚完成逆置的节点
while开始之后
每次都将q赋值给p,于是 p=B, q =C, B->next=head->next = A, head-next = B
此时head->next指向B,刚好又是刚完成逆置的节点
以后继续循环


链表就地逆置p->next=head->next意思
head->next总是指向已经经过逆置的最后一个节点,也就是新的经过逆置的头节点 所以每次完成一个新的节点的逆置,要将其next指向上一个逆置的节点,刚好是head->next指向的节点 比如原来有链表 A->B->C->D->NULL 开始head->next = A, head->next->next=B 首先让p=A,并让A->next=NULL,...

单链表就地逆置有几种方法
p->next=NULL;return head; \/\/返回新的子序列的头结点 } 2.用普通算法循环逆置(头插法重新建立带头结点的新链表)Node *Reverse(Node *head){ Node *p=head->next;if(p)\/\/若链表不为空,则逆置,否则,空操作 { Node *q=p->next;head->next=NULL;\/\/头结点分离 while(p){ p->ne...

单链表的就地逆置的算法!!
思路为:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。实现代码:void converse(LinkList *head) { LinkList *p,*q; p=head->next; head->next=NULL;...

写一c语言算法,实现对单链表就地逆置。
void inverse(LinkList &L){ LinkList h,p,q;q=L;p=h=L->next; \/\/把q指向旧链表头,p,h指向第二个节点 while(p!=NULL) \/\/倒置,把旧链表后一个节点的next指向前一个节点 { h->next=q;q=q->next;p=p->next;h=p;} L->next=NULL; \/\/旧链表的头变成了新链表的尾,所以ne...

...实现将线性表(a0,a1,...an-1)就地逆置的操作,所谓"就地"指辅助...
于是就等价于q = NULL 的话,你需要对指针这个东西有更深入的理解 q=p->next; 是让q只想p的next指针所指的东西,比如q->next本来指向我这个人,那么现在q也指向我了。q->next也指向我,不变。p -> next=NULL; 的意思是让p->next 指向空。但是这不影响刚才执行以后 q指向我这个事实 ...

单链表就地逆置的问题,说第一行语法错误,什么意思,求解答
你这里用的是 c还是c++,如果是 c语言,则不能使用引用,引用是c++对c的扩展,可以使用指针。

数据结构 单链表 就地逆置 C++ 不允许申请新的节点空间 输入输出顺序...
q->next=p;q=p;} q->next=NULL;} return h;} \/\/输出链表的数据 void output(Data *h){ while(h){ cout<<h->d;if(h->next){ cout<<" ";} h=h->next;} cout<<endl;} \/\/逆转链表 Data* reverse(Data *h){ Data *p=h,*q=NULL;if(h){ p=p->next;h->next=NULL;} ...

写一个算法,实现顺序表的就地逆置,即在原表的存储空间将线性表(a1...
p->next=L->next;L->next=p;} a=L->next;printf("原来的链表中的元素为:\\n");while(a){ printf("%d, ",a->data);a=a->next;} printf("\\n");m=L->next;n=m->next;while(n->next){ r=n->next;n->next=m;m=n;n=r;} n->next=m;L->next->next=NULL;L->next...

下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,求...
void reverse(linklist &L){ linklist p = NULL, q = L; while(q != NULL){ L = q->next; \/\/ 保留下一个节点 q->next = p; p = q; q = L; \/\/ 移动到下一个节点 } L = p; \/\/ 指向逆置后的头节点} ...

c语言的就地逆置问题
不用改,直接用。可以把这段代码复制到main函数所在的文件中(在main之前),然后定义一个链表,插入一些节点,调用这个函数测试是否逆置了。

卧龙区18990189004: 怎样对单向链表进行就地逆置? -
中叔利格力: /单链表的就地逆置 // 头插法: //先将头结点与链表的其他节点断开,然后利用头插法的原理将剩下的结点一次插到头结点的后面 //这样就实现了逆置 //由于通过形参可以改变主函数中的数值所以此处函数的类型可以设置为void类型 void ...

卧龙区18990189004: 就地逆置 是什么意思 -
中叔利格力: 比如说链表 a -> b -> c -> d 表头是a,表尾是d.就地逆置的意思就是变成: a <- b <- c <- d a变成表尾,d变成表头假设 struct LINK {int value;struct LINK * next; }; struct LINK a, b, c, d; a->next = &b; b->next = &c; c->next = &d; d->next = 0; 逆置...

卧龙区18990189004: 试写一算法,对单链表实现就地逆置.
中叔利格力: void reverse(LinkList &L)//单链表的就地逆置{ p=L->next; if(p=NULL|| p->next=NULL) return OK;//空表和表中只有一个结点时,不用逆置. while(p->next!=NULL) { q= p->next; p->next=q->next; //删除结点q,但未释放 q->next=L->next; L->next=q; //将q插入头结点之后 } return OK; }//reverse

卧龙区18990189004: 写一c语言算法,实现对单链表就地逆置.
中叔利格力: //原来下面标1、2的地方位置错了,先改正 void Inverse(LinkList &amp;L) { LinkList head=p=L,q; while(p!=NULL) { q=head; head=p; p=p-&gt;next;//1 head-&gt;next=q;//2 } L=head; }

卧龙区18990189004: 关于单链表的所有结点逆置 -
中叔利格力: //就地逆置单链表//定义结点数据元素结构体 typedef struct snode { DataType x; struct snode *next; }SLNode;//逆置算法 void ListReverse(SLNode *head) { int i=-1,j; DataType x; SLNode *p,*q; p=head; while(p->next!=NULL&&i<(ListLength(head)-1)...

卧龙区18990189004: 用c语言实现单链表的逆置,能将此程序详细的解释一下吗? -
中叔利格力: 用c语言实现单链表的逆置的方法:p=head; s=p->next; while(s->next!=NULL) t=s->next; s->next=p; s=t; s->next=p; head->next->next=NULL; head->next=s; p=head; //p最开始指向头结点 s=p->next; //s最开始指向第一个节点 while(s->next!=NULL)//...

卧龙区18990189004: 试写一算法,对单链表实现就地逆置. 啥意思??? -
中叔利格力: 可理解成,将原来单链表的结点取下来,采用单链表的头插法,插入头结点之后.当完成后,最后一个结点变成首元结点,原来的首元结点变成最后一个结点,其他的依次类推.

卧龙区18990189004: c语言链表逆置详解? -
中叔利格力: 思路 ==》创建一个新的链表,然后顺序遍历原链表,将其每一项都前插到新链表中.这样得到的新链表就是原链表的逆向链表 例子看下面的 #include <stdio.h> //结构体,用整数作数据 typedef struct tNODE { int data; struct tNODE *next; }NODE...

卧龙区18990189004: 设计一个算法,利用单链表原来的结点空间将一个单链表就地逆转 -
中叔利格力: 1.建立两个指针struct* p,q,p=head,q=p->next,即最开始p指向7a686964616f31333262353335链表的第1项,q指向第2项 2.if q->next !=NULL, p=p->next,q=q->next 3.endif q->next ==NULL,即q指向最后一项,p指向倒数第二项新建一个指针,...

卧龙区18990189004: 对单链表实行就地逆置算法? -
中叔利格力: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21其实就是建立链表有的头插法 #define ElemType chartypedefstructNode{ElemType data;structNode *next; }Node,*LinkList;voidReverseList(LinkList L) {Node *p,*q;p = L->next; /*p为原链...

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