问一个关于链表的问题。
关于创建链表,比如说
struct STU
{
char tel[12];
char name[5];
char qq[12];
struct STU * next;
};
定义这个结构体,{
char tel[12];
char name[5];
char qq[12];
struct STU * next;
};
在创建链表的时候,
关于头结点的问题,
我看论坛里的帖子的定义是这样的,
struct STU *p, *tail;
p = (struct STU *) malloc(sizeof(struct STU));
printf("请输入第1位学生姓名qq及电话:\n");
scanf("%s%s%s", p->name, p->qq, p->phone);
p->next = NULL;
head = p;
tail = p;
for (i = 1; i < N; i++)
{
p = (struct STU *) malloc(sizeof(struct STU));
printf("请输入第%d位学生姓名qq及手机号:\n", i + 1);
scanf("%s%s%s", p->name, p->qq, p->phone);
tail->next = p;
p->next = NULL;
tail = p;
}
p = (struct STU *) malloc(sizeof(struct STU));
printf("请输入第1位学生姓名qq及电话:\n");
scanf("%s%s%s", p->name, p->qq, p->phone);
p->next = NULL;
head = p;
tail = p;
for (i = 1; i < N; i++)
{
p = (struct STU *) malloc(sizeof(struct STU));
printf("请输入第%d位学生姓名qq及手机号:\n", i + 1);
scanf("%s%s%s", p->name, p->qq, p->phone);
tail->next = p;
p->next = NULL;
tail = p;
}
我自己的定义是:
struct STU * pnew;
pnew=(struct STU*)malloc(sizeof(struct STU));
pnew->NEXT=NULL;
pnew=phead;
for(i=0;i<N;++i)
{
STU * plist;
plist=(struct STU*)malloc(sizeof(struct STU));
plist->NEXT=NULL;
printf("请输入第%d个学生的姓名电话和QQ:\n",i+1);
scanf("%s%s%s",plist->name,plist->tel,plist->qq);
pnew->NEXT=plist;
pnew=plist;
}
我也想了蛮久,
这两种的区别是,第二种头结点head只保存了指针地址,没有保存数据,从头结点之后开始保存,但是我觉得第一种的代码写的太麻烦了,
我想了好久了,
麻烦各位解释下,哪种好?