关于c语言链表的一个问题h->next=p1,p2->next=p1是什么意思,又有什么作用

structstu{intnum;floatscore;structstu*next;}*h,*p1,*p2;p1=(structstu*)malloc(sizeof(s... struct stu { int num; float score; struct stu *next; } *h,*p1,*p2; p1=(struct stu *)malloc(sizeof(struct stu)); h=p1; p1=(struct stu *)malloc(sizeof(struct stu)); h.next=p1; p2=p1; p1=(struct stu *)malloc(sizeof(struct stu)); p2.next=p1; p2=p1;
如果我在h=p1处加上p2=p1那么h.next=p1是否可以不要,而改为p2.next=p1呢
展开
 我来答
cx76544658
推荐于2018-04-11 · 超过12用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:30万
展开全部
struct stu //定义结点结构体,单链表
{
int num;
float score;
struct stu *next;
} *h,*p1,*p2;

/*malloc动态分配一个节点空间A,返回该空间的指针给p1 */
p1=(struct stu *)malloc(sizeof(struct stu));
/*p1赋给h(通常意味头指针),可以理解为使用h表示空间A*/
h=p1;
/*malloc动态分配一个节点空间B,返回该空间的指针给p1*/
p1=(struct stu *)malloc(sizeof(struct stu));
/*h节点的next成员指向空间B,就把A-B链起来了,可以理解为使用p1表示空间B*/
h.next=p1;
/*p1赋给p2,此时用p2表示空间B了*/
p2=p1;
/*malloc动态分配一个节点空间C,返回该空间的指针给p1*/
p1=(struct stu *)malloc(sizeof(struct stu));
/*p2(空间B)的next指向空间p1,把B-C链起来*/
p2.next=p1;
/*又用p2表示空间C,此时链表的结构是A-B-C了。*/
p2=p1;
/*综上所述,这个程序建立了一个链表,h指向头结点,p2指向尾结点,每次新增结点时,都把新分配的结点空间赋给p1,再把p1链到p2上去*/
追问
如果我在h=p1处加上p2=p1那么h.next=p1是否可以不要,而改为p2.next=p1呢
追答
是可以的,这里要清楚,指针只是用来存一个地址的,h=p1和p2=p1都是把新建的空间的地址进行赋值,但实际上,空间还是一个空间,就像你家只有一间房,只有一个门牌号,你把这个门牌号抄给多少人,都不会使你家的房子变多的,只不过这些人都能找到你家而已。所以当h和p2都指向同一个地址的时候,这两个做的是同一个操作
五白曼HA
2013-09-08 · 超过18用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:56.3万
展开全部
h p1 p2 分别为指向一整个结构体的指针,而next分别为各结构体的内部定义的指向另一个结构体的指针

h->next=p1 就是h结构体的成员next指向p1结构体,
p2->next=p1 如上述解析。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式