关于链表的建立和插入新的结点有点有关问题,有人能帮小弟我看一下吗

关于链表的建立和插入新的结点有点问题,有人能帮我看一下吗?
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L,int n)
{
LinkList q,l,p;
l=(LNode*) malloc (sizeof(LNode));
q=l;
L=l;
l->next=NULL;
for(int i=n;i>0;i--)
{
  p=(LNode*) malloc (sizeof(LNode));
  scanf("%d",&(p->data));
  q->next=p;
  q=p;
  q->next=NULL;
}  
}
void EnLinkList(LinkList &L,int i)
{
LinkList p,s;
int j=0;
p=L;
while(i--)
{
p=p->next;
}
s=(LinkList)malloc(sizeof(LNode));
int e;
scanf("%d",&e);
s->data=e;
s->next=p->next;
p->next=s;

}



void main()
{
LinkList pa,La,pb;
CreateList(La,4);
pa=La;
while(pa)
{
printf("%d\n",pa->data);
pa=pa->next;
}
printf("请输入e的值:");
EnLinkList(La,2);
pb=La;
while(pb)
{
printf("%d\n",pb->data);
pb=pb->next;
}
}

输出时有乱码,怎么来的呢?不知道哪出问题了。




------解决方案--------------------
C/C++ code
void CreateList(LinkList &L,int n)
{
    LinkList q,l,p;
    l=(LNode*) malloc (sizeof(LNode));
    scanf("%d",&(l->data));    /*这儿是否是需要个赋值语句*/
    q=l;
    L=l;
    l->next=NULL;
    for(int i=n;i>1;i--)    /*这儿的循环次数应该是n-1吧?前面已经有1次了*/
    {
        p=(LNode*) malloc (sizeof(LNode));
        scanf("%d",&(p->data));
        q->next=p;
        q=p;
        q->next=NULL;
    }   
}