看下列个算法实现。我的输入模块和输出模块是不是有错!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE            1
#define FALSE           0
#define OK              1
#define ERROR           0
#define INFEASIBLE      -1
#define OVERFLOW        -2
typedef struct LNode{             /*定义一各结点结构体类型*/ 
      int data;
      struct LNode *next;
      } LNode,*Link;
typedef struct {                /*定义一各链表结构体类型*/ 
      Link head,tail;
      int len;
    }List,*LinkList;
Link  MakeNode(int e){            /*创建一个结点*/ 
     Link p;                         /*如果为position 则为p*/ 
    p=(Link )malloc(sizeof (LNode));         
     p->data=e;
     p->next=0;
     return p;                      /*返回类型应该何前面的一致,如果是指针,就要返回指针*/      
             }
 void  InitList(LinkList L){       /*构造一各空的链表*/ 
     Link p;              /*结点为空*/ 
     p=MakeNode(0);                  /*创建一各空结点*/ 
     if(!p)exit (ERROR);                  
     L=(LinkList)malloc(sizeof (List));  /*为链表分配存储空间*/ 
     L->head=p;                    /*链表头结点指向p空结点*/ 
     L->tail=NULL;                  /*链表尾结点为空*/  
     L->len=0;            
          }      
 Inserent(LinkList L){
     int i,n;
     Link p,q;

   printf("请输入长度:");
   scanf("%d",&n);
   L->len=n;
printf("请输入数字:");
 for(i=0;i<L->len;i++){
       p=(Link)malloc(sizeof(LNode));
        scanf("%d",&p->data);                   
            p->next=0;
           L->head->next=p;
            L->head=p;
            }  
}
output(LinkList L){
    int i;
    Link p;
    p=L->head->next;
    for(i=0;i<L->len;i++)
 {     printf("%d",p->data);
      p=p->next;   
    }

}
 main(){
       List la;
     InitList(&la);   /*构造空链表*/ 
     Inserent(&la);
     output(&la);
}