标题:链表动态分配空间,看了很久了看不明白,这是函数的一部分,主要是这个不懂 ...
只看楼主
S3232
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-15
 问题点数:0 回复次数:3 
链表动态分配空间,看了很久了看不明白,这是函数的一部分,主要是这个不懂,有没有大佬给我一点比较详细的解释啊,非常感谢
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);
}
搜索更多相关主题的帖子: head 比较 函数 链表 NULL 
2021-11-17 15:34
S3232
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-15
得分:0 
书上说p2=p1是指向尾节点,为什么指向尾节点不用p2=p1->next?
2021-11-17 16:16
diycai
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:147
专家分:895
注 册:2021-5-18
得分:0 
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);
}
2021-11-17 16:55
S3232
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-15
得分:0 
谢谢大佬耐心解答
2021-11-18 14:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507552-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.273334 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved