- #include<stdio.h>
- #include<malloc.h>
- typedef struct node                      /*定义结点的存储结构*/
- {
-     int data;
-     struct node *next;
- }NODE;
- NODE *create()                        /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/
- {
-     NODE *head,*q,*p;                 /*定义指针变量*/
-     int a,n;
-     head=(NODE*)malloc(sizeof(NODE));  /*申请新的存储空间,建立表头结点*/
-     q=head;
-     printf("\nInput number of the list: ");
-     scanf("%d",&n);                          /*输入单向链表结点个数*/
-     if(n>0)                                  /*若n<=0,建立仅含表头结点的空表*/
-     {
-         printf("Input the list :");
-         while(n>0)
-         {
-               scanf("%d",&a);                  /*输入新元素*/
-             p=(NODE*)malloc(sizeof(NODE));
-             p->data=a;
-             q->next=p;
-             q=p;
-             n--;
-         }
-     }
-     q->next=NULL;
-     return(head);                           /*返回表头指针head*/
- }
- void insert(NODE *p,int x)             /*在链表的p结点位置后插入给定元素x*/
- {
-     NODE *q;
-     q=(NODE*)malloc(sizeof(NODE));  /*申请新的存储空间*/
-     q->data=x;
-     q->next=p->next;                 /*实现图2.9(b)的①*/
-     p->next=q;                      /*实现图2.9(b)的②,将新结点q链接到p结点之后*/
- }
- main()                  /*主程序*/
- {
-    int x,position;         /*x为将插入的元素,position为插入位置的序号*/
-    int i=0,j=0;
-    NODE *c,*d;
-    c=create();           /*建立单向链表*/
-    d=c->next;
-    while(d!=NULL)      /*统计单向链表中结点数,置j中*/
-    {
-        d=d->next;
-        j++;
-    }
-    d=c;
-    do
-    {
-        printf("Input position (again):");
-        scanf("%d",&position);         /*position可为0,表示表头结点*/
-    }while((position>j)||position<0);     /*position值超过单向链表结点数,重新输入*/
-    printf("Input x:");
-    scanf("%d",&x);
-    while(i!=position)                 /*由position值确定其在单向链表中的位置d*/
-    {
-        d=d->next;
-        i++;
-    }
-    insert(d,x);
-    printf("Output the list:");
-    while(c->next!=NULL)            /*输出插入x后的单向链表各元素*/
-    {
-        c=c->next;
-        printf("%5d",c->data);
-    }
-    printf("  ok");
- }