例24编写通用的函数,可根据需要建立任意节点数的链表。structstudent*creat()/*无参有返回值*/{structstudent*head=NULL,*p1,*p2;intlen;longn;floats;len=sizeof(structstudent);while(1)/*循环次数不确定*/{printf(\number,score:\scanf(\&n,&s);if(n==0)break;/*输入0表示数据结束*/p1=(structstudent*)malloc(len);┇}return(head);}
┇
while(1)
{printf(\number,score:\scanf(\&n,&s);if(n==0)break;/*以0表示数据结束*/p1=(structstudent*)malloc(len);
p1->num=n;p1->score=s;/*转存入节点*/if(head==NULL) head=p2=p1;else { p2->next=p1; p2=p1; }}
p2->next=NULL; /*末尾链节成员赋空*/return(head); /*返回链表头指针*/} /*creat*/
/*输出各节点*/
voidplink(structstudent*head){structstduent*p;inti;
for(i=1;i<=N;i++){if(i==1)p=head;elsep=p->next;
printf(\
i,p->num,p->score);
}
return;}
void plink(struct student *head) /*更具通用性*/{ struct student *p;p=head;
while(p!=NULL)
{ printf(\
p->num, p->score);p=p->next;}
return;}
注:本形式的链表输出函数具有通用性,可适应由于删除或插入节点引起的链表长度的变化。