有关C语言链表的问题 。

2025-05-15 08:25:33
推荐回答(3个)
回答1:

if(head==NULL)
p2=head=p1;
else
p2->next=p1;
p2=p1;
这段代码的意思:如果一开始链表是空的话,则将P1插入到head位置,也就是头结点。
如果链表不为空,也就是说链表中已经存在若干结点,而p2始终指向链表的末尾,所以令
p2->next=p1;
也就是说,新插入的结点都是在链尾插入的。
而P2 =P1保证,P2总是指向链的最后一个元素,也就是链尾。

回答2:

head是链头,p1,p2是作为为把各链结点链在一起的辅助变量,
如果链表头是空的则全指向链头,
否则就利用p2,p1把各结点链接起来,
比如现在第一循环后,head不为空,P2,P1均指向同一地址,
下一循环,P1得到新地址,此时,
p2->next = p1.也就是 head->next = p1,
形像地看就是 |head| --- |结点1| 形成了有两结点的链,随后P2再指向最后一结点,
循环以上动作把表结点链接起来。

看不懂个人认为是对指针的不够理解,回头再复习下指针就明白了。

回答3:

这个IF esle 是用来判断是不是第一个第一个结点的。因为在录入第一结点即第一个人的数据时,是把数据赋给p1所指向的结点。链表,顾名思义就是把个个结点像链子似的连在一起,p2=head=p1意思是把p1所指向的结点地址给head,这样就可以实现把头结点head和第一个结点连接在一起。p2是为了下一次的连接做准备的。