C语言单链表中L->next = p 和 p = L->next的区别?

#include<stdio.h>
#include<stdlib.h>
typedef struct Link{
int data;
struct Link *next;
}LinkList;

LinkList* InitLinkList(){
LinkList *L;
L=(LinkList *)malloc(sizeof(LinkList));
L->data=0;
L->next=NULL;
return L;
}

void CreatLinkList(LinkList *L){
int x;
LinkList *p;
scanf("%d",&x);
while(x!=0){
p=(LinkList *)malloc(sizeof(LinkList));
p->data=x;

L->next=p;
L=p;
scanf("%d",&x);
}
p->next=NULL;
}

LinkList* GetNode(LinkList* L,int Locate){
int i=1;
LinkList* p;
p=L->next;
if(Locate<1 || Locate>GetSumOfNode(L)){
printf("没有该节点!");
}else{
while(i<Locate && p!=NULL){
p=p->next;
i++;
}
return p;
}
}

int GetSumOfNode(LinkList* L){
int sum=0;
LinkList* p;
p=L->next;
while(p!=NULL){
sum++;
p=p->next;
}
return sum;
}

void DisplayLinkList(LinkList *L){
LinkList *p;
p=L->next;
printf("数据为:");
while(p!=NULL && p->data!=0){
printf("%d ",p->data);
p=p->next;
}
}

void AddNode(LinkList* L,int Locate,int num){
LinkList *p,*s;
s=(LinkList*)malloc(sizeof(LinkList));
s->data=num;

p=GetNode(L,Locate-1);
s->next=p->next;
p->next=s;
}

void DeleteNode(LinkList *L,int Locate){
LinkList *p,*q;
p=GetNode(L,Locate-1);
q=GetNode(L,Locate);

p->next = q->next;
free(q);

}

int main(){
LinkList *L;
L=InitLinkList();
printf("请输入想要输入的值,以0结束:");
CreatLinkList(L);
DisplayLinkList(L); putchar(10);
printf("总结点数为:%d\n",GetSumOfNode(L));
printf("第三个节点的数据为:%d\n",GetNode(L,3)->data);
AddNode(L,3,333);
printf("总结点数为:%d\n",GetSumOfNode(L));
DisplayLinkList(L);putchar(10);
DeleteNode(L,3);
printf("总结点数为:%d\n",GetSumOfNode(L));
DisplayLinkList(L);
putchar(10);
printf("一个LinkList的指针大小为:%d\n",sizeof(L));
printf("一个LinkList结构体的大小为:%d\n",sizeof(LinkList));
}
比如在CreatLinkList函数中的 L->next = p ; 是怎么解释的?
还有AddNode函数中 p->next=s;是怎么解释的?

L->next = p L->next指向P指向的节点。
p = L->next p指向L->next指向的节点。
温馨提示:答案为网友推荐,仅供参考
相似回答