注册 登录
编程论坛 C语言论坛

链表动态分配空间,看了很久了看不明白,这是函数的一部分,主要是这个不懂,有没有大佬给我一点比较详细的解释啊,非常感谢

S3232 发布于 2021-11-17 15:34, 1525 次点击
int i=0;
struct STU *head =NULL,*p1,*p2;
while(i<n){
p1=(struct STU*) malloc(LEN);
p1–>next = NULL;
scanf("%s%f",p1->num,&p1->score);
// 结构体里面num是一个数组,score是整型变量。
if(head == NULL){//提问:在定义head的时候就已经是空的了,为啥还要判断head是不是为null
head = p1;//这儿完全看不懂,为啥p1给了head,p1还能给p2
p2= p1;
}
else{
p2->next =p1;//这里也是,哎好蒙
p2= p1;
}
i++;
}
return(head);
}
3 回复
#2
S32322021-11-17 16:16
书上说p2=p1是指向尾节点,为什么指向尾节点不用p2=p1->next?
#3
diycai2021-11-17 16:55
int i=0;
struct STU *head =NULL,*p1,*p2;
while(i<n){
p1=(struct STU*) malloc(LEN);//p1指向新申请的空间
p1–>next = NULL;//由于是加到原链表尾部,故新元素的下一个元素初始化为空
scanf("%s%f",p1->num,&p1->score);
if(head == NULL){//head仅初始化时为空,在while(i<n)循环中会变的
head = p1;//由于初始链表为空,所以新元素做为头,此时head不为空了
p2= p1;//p2用来临时记录链表尾部元素
}
else{
p2->next =p1;//如果链表非空,那么就找到链表尾部,将链表尾部的下一个元素设置为新元素
p2= p1;//更新p2链表尾部元素为新元素
}
i++;
}
return(head);
}
#4
S32322021-11-18 14:36
谢谢大佬耐心解答
1