例11.11插入结点的函数insert如下。
struct student*insert(struct student *head,struct student *stud)
{struct student *p0,*p1,*p2;
p1=head;/使p1指向第一个结点/
p0=stud; /p0指向要插入的结点/
if(head==NULL)  /原来的链表是空表/
{head=p0; p0->next=NULL;} /*使p0指向的结点作为头结点*/
else
{while((p0->num>p1->num) && (p1->next!=NULL))
{p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next;} /*p1后移一个结点*/
if(p0->num<p1->num)
{if(head==p1) head=p0; /插到原来第一个结点之前*/
else p2->next=p0;  /插到p2指向的结点之后*/
p0->next=p1;}
else
{p1->next=p0; p0->next=NULL;}}/*插到最后的结点之后*/
n=n+1;  /结点数加1*/
return(head);
}
函数参数是head和stud。stud也是一个指针变量,从实参传来待插入结点的地址给stud。语句p0=stud的作用是使p0指向待插入的结点。函数类型是指针类型,函数值是链表起始地址head。