输出链表

来源:百度知道 编辑:UC知道 时间:2024/06/15 00:59:52
我在主函数内建立了链表。可是在输入只输出最后一个的数据,请大家帮下我,说原因,不要改题目,谢谢啊。程序如下:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define N 5
#define STU struct student
STU
{
int num;
int name;
STU *next;
};
void main()
{
int i;
STU *head,*pb,*pf,*p;
for(i=0;i<N;i++)
{
p=(STU *)malloc(sizeof(STU));
printf("\ninput %dth information:\n",i+1);
printf("num:");
scanf("%d",&pb->num);
printf("name:");
scanf("%d",&pb->name);
if(i==0) head=pf=pb;
else pf->next=pb;
pb->next=NULL;
pf=pb;
}
p=head;
printf(" num name \n");
while(p!=NULL)
{
printf("%-7d%-7d\n",p->num,p->name);
p=p->next;
}
}

这句错了:
p=(STU *)malloc(sizeof(STU));
应该是为pb申请空间,而不是p。
你后面的操作,无论是输入数据还是连接节点,全都是针对pb。
所以,pb始终都指向同一个节点,每一次的输入都只是覆盖前面的内容,当然只输出最后一个节点了。

我也遇到同样的问题啊

修改下面这点:

if(i==0) head=pf=p;//空表情况
else {pf->next=p;
p->next=NULL;
pf=p;}//在表的后面插入结点.三步:第一,让表尾指针指向新结点,第二,新结点的NEXT指向空,第三,表尾指针移到当前结点.