下面的程序 有三句不明白是什么意思 请指教 谢谢! p->next=L->next; L->next=p; L=L->next;

//此程序是从网上复制的! ! !
#include<iostream>
using namespace std;
typedef double ElemType;//double类型可以换成其他的
typedef struct RLNode
{
//定义循环链表的节点
ElemType data;
struct RLNode *next;
}RLNode,*RLinkList;
//-------------------------------------------
void CreateList_RL ( RLinkList & L);//创建一个循环链表
void ScanList_RL ( RLinkList L);//遍历循环链表
void DeleteList_RL ( RLinkList & L,int K,ElemType X);//删除第K个节点以及删除值为X的点
//------------------------------------------
void main()
{
RLinkList L=(RLinkList) malloc ( sizeof(RLNode) );
L->next=L;//创建空的循环链表
cout<<"请输入循环链表各个节点的数(double型),-1表示结束"<<endl<<endl;
CreateList_RL(L);
cout<<"输入的循环链表各个节点的数为"<<endl;
ScanList_RL(L);
cout<<"请输入要删除的循环链表节点位序,以及要删除的值"<<endl;
int K; ElemType X; cin>>K>>X;
DeleteList_RL ( L,K,X);
cout<<"删除后得到的循环链表各个节点的数为"<<endl;
ScanList_RL (L);
}
//---------------创建循环链表-----------------
void CreateList_RL ( RLinkList & L)
{
ElemType t; cin>>t;
while(t!=-1)
{
RLinkList p= (RLinkList) malloc ( sizeof(RLNode) );//申请一个新的节点
p->data=t;//将新节点接到末尾,并将指针L后移一位,

p->next=L->next; //请问这一句 是什么意思???
L->next=p; //请问这一句 是什么意思???
L=L->next; //请问这一句 是什么意思???
cin>>t;
}
//因为现在L指向尾节点,为得到头结点应后移一位
L=L->next;
}
//----------------遍历循环链表--------------------
void ScanList_RL ( RLinkList L)
{
RLinkList p=L->next;
while(p!=L)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl<<endl;
}
//--------------删除第K个节点以及删除值为X的点-----------
void DeleteList_RL ( RLinkList & L,int K,ElemType X)
{
RLinkList p=L,q;
int i=0;
while(p->next!=L)
{ //所有的操作都要在p->next!=L下进行
//当p的下一个节点位序为K或者下一个节点值为X,删除
if(i==K-1 || p->next->data==X)
{
q=p->next;
p->next=q->next;
free(q);
i++;//若在还没到K之前就删节点,会影响位序,所以要做i++
}
//i<K-1时使用++是为了得到i=K-1的点,当i==K-1上面已经做了++,
//此时i会大于K-1
if(i<K-1)
i++;
p=p->next;
}
}

整个的意思是,生成一个新的节点,并将其插入到数据链中(应该是一个闭合的链,就是头尾相连)。

L是整个链中的初始节点,仅一个节点时,节点的next指向自己。也作为最后一个节点。
新节点p,将被作为最后一个节点插入数据链中。

RLinkList p= (RLinkList) malloc ( sizeof(RLNode) );//生成数据节点空间
p->data=t; //保存节点的数据,t是输入的数据,也是节点中的数据
p->next=L->next; // L代表最后一个节点(应该是last的字头),L的next是指向头的,p将作为最后一个节点
L->next=p; // p将作为L的下一个节点,即新的最后一个节点
L=L->next; // 将最后一个节点设置为p,此句实际上就是, L=p;追问

L->next=p 的意思是将两个节点 连起来 对吧? L=L->next; 是不是应该写成L=p->next 呢?因为p是最后一个节点 而且p->next=L->next;也是 将 本来指向L的L->next 赋给了p->next 这样不就形成一个环了吗

追答

L->next=p 的意思是将两个节点 连起来 对吧?

是将p链接到L的下一个节点上。
此时,L不是最后一个节点了。

L=L->next; 是不是应该写成L=p->next 呢?因为p是最后一个节点 而且p->next=L->next;也是 将 本来指向L的L->next 赋给了p->next 这样不就形成一个环了吗

L=L->next; 不应该写成L=p->next ,而可以写成L=p;
通过上一个操作,L已经不是最后一个节点了。L中的next是最后一个节点,也就是p。通过此操作后,L又成了最后一个节点。

追问

使链表形成闭合的环的步骤 是 p->next=L->next 和 L->next=p; 而 L=L->next; 是让L永远指向 最后一个节点 对吗?

追答

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-23
好长啊,我看你问题中的三句了,p->next=L->next; L->next=p; L=L->next;
如果p和l都是指向节点的指针,你是在做链表创建函数的话,

这3句就是把现在新创建的节点的地址值给前一个节点的next指针,
然后把新建的节点地址值给当前用的用做循环的一个指针,让这个指针指向的节点在下次循环时变成当前节点追问

L->next=p 的意思是将两个节点 连起来 对吧? L=L->next; 是不是应该写成L=p->next 呢?因为p是最后一个节点 而且p->next=L->next;也是 将 本来指向L的L->next 赋给了p->next 这样不就形成一个环了吗

第2个回答  2012-11-24
p->next=L->next; 是把L的下一个结点赋给p
L->next=p; 是把p赋给L的下个节点
L=L->next;把L的下个结点赋给L
相似回答