C语言单链表中L->next = p 和 p = L->next的区别? 10
#include<stdio.h>#include<stdlib.h>typedefstructLink{intdata;structLink*next;}LinkLis...
#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;是怎么解释的? 展开
#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;是怎么解释的? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询