#include<stdlib.h>
#include<stdio.h>
#define max 10
struct list                    
      {
      int data;
      struct list *next;
      };                           //定义结构体



typedef struct list node;       //结构体的变量
typedef node* link;           //结构体指针




//链表输出函数的实现方式
void link_output(link new)
    
{   
   link q=new;
   int i;
   for(i=0;q!=NULL;i++,q=q->next)
      
      {
        printf("the %dshuju is %d\n",i+1,q->data); 
        
    }
   printf("out_put success\n");
   
}





//链表插入函数的实现部分
void link_insert(link new)
{  int i,n;
   link insert,p;
   p=new;
   insert=(link)malloc(sizeof(node));
   if(insert==NULL)
       {
          printf("插入数据的创建失败");
       exit(0);
       }
   else
       {   
         printf("please set you insert number");
      scanf("%d",&n);
      insert->data=1000;
      insert->next=NULL;
      for(i=1;i!=n&&p!=NULL;p=p->next,i++);
      
      insert->next=p->next;
      p->next=insert;
      
      
      
       }
    
}

//释放链表程序函数
void free_link(link new)

{   int i=0;
    printf("wait for free:\n");
  link pointer=new;
    printf("%d\n",pointer);
  while(pointer!=NULL)
      {
    
     new=pointer->next;
     free(pointer);
      pointer=new;    
      //这句应该放在free后面,要是放在最前面会造成pointer成为野指针所以会造成其他应用程序的数据出错
     
     printf("free success  %d\n",++i);
    };
   
}








int main()
{
  link new,p,q;         //定义链表中间指针变量,实现链表的传递
   int n;
  int i,j;
  int a[max]={12,35,78,90,67,28,74,36,78,54};
  new=(link)malloc(sizeof(node));    //注意malloc函数的使用:
  if(new==NULL)                  
      {
     printf("memory allocate failure");
    }
  else
      {  
       printf("please input the data number:");
       scanf("%d",&n);
       new->data=a[0];
       q=new;

       //定义中间变量,实现进行链表的传递
       
       for(i=1;i<max;i++)
           {
           p=(link)malloc(sizeof(node));
        q->next=p;
        p->data=a[i];
        q=p;
        p->next=NULL;
           }
     }
  link_insert(new);
  link_output(new);
  printf("wait for free:\n");
  free_link(new);
     
  
}

 更改后的(主要更改在表头添加节点数据)

#include<stdlib.h>
#include<stdio.h>
#define max 10
struct list                    
      {
      int data;
      struct list *next;
      };                           //定义结构体



typedef struct list node;       //结构体的变量
typedef node* link;           //结构体指针




//链表输出函数的实现方式
void link_output(link new)
    
{   
   link q=new;
   int i;
   for(i=0;q!=NULL;i++,q=q->next)
      
      {
        printf("the %dshuju is %d\n",i+1,q->data); 
        
    }
   printf("out_put success\n");
   
}





//链表插入函数的实现部分
link link_insert(link new)
{  int i,n;
   link insert,p;
   p=new;
   insert=(link)malloc(sizeof(node));
   if(insert==NULL)
       {
          printf("插入数据的创建失败");
       exit(0);
       }
   else
       {   
         printf("please set you insert number");
      scanf("%d",&n);
      insert->data=1000;
      insert->next=NULL;
      if(n==0)   //需要插入链表的开头,将链表开头更换
          {
             insert->next=new;
           new=insert;
           return new;
          }
      for(i=1;i!=n&&p!=NULL;p=p->next,i++);
      
      insert->next=p->next;
      p->next=insert;
      
      
      
       }
}

//释放链表程序函数
void free_link(link new)

{   int i=0;
    printf("wait for free:\n");
  link pointer=new;
    printf("%d\n",pointer);
  while(pointer!=NULL)
      {
    
     new=pointer->next;
     free(pointer);
      pointer=new;    
      //这句应该放在free后面,要是放在最前面会造成pointer成为野指针所以会造成其他应用程序的数据出错
     
     printf("free success  %d\n",++i);
    };
   
}








int main()
{
  link new,p,q;         //定义链表中间指针变量,实现链表的传递
   int n;
  int i,j;
  int a[max]={12,35,78,90,67,28,74,36,78,54};
  new=(link)malloc(sizeof(node));    //注意malloc函数的使用:
  if(new==NULL)                  
      {
     printf("memory allocate failure");
    }
  else
      {  
       printf("please input the data number:");
       scanf("%d",&n);
       new->data=a[0];
       q=new;

       //定义中间变量,实现进行链表的传递
       
       for(i=1;i<max;i++)
           {
           p=(link)malloc(sizeof(node));
        q->next=p;
        p->data=a[i];
        q=p;
        p->next=NULL;
           }
     }
  new=link_insert(new);
  link_output(new);
  printf("wait for free:\n");
  free_link(new);
     
  
}