C语言如何用递归算法建立单链表?

以void createList(LinkList &p)
{
ElemType e;
}为接口编写
实在是不会,写出来的编译正确,但运行不了


#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct Node
{
    ElemType e;
    struct Node *next;
}*LinkList;

void createList(LinkList &p){
    ElemType e;
    if (p)
    {
        Node *s=(Node *)malloc(sizeof(Node));
        scanf("%d",&e);
        s->e=e;
        s->next=p->next;
        p->next=s;
        p=s;
        if(e!=-1){
            createList(p);
        }else
        {
            createList(p->next);
        }
    }else
    {
        printf("创立完成\n");
    }
}

int main()
{
    LinkList L,q;
    L=(Node *)malloc(sizeof(Node));
    q=L;
    L->next=NULL;
    createList(L);
    while (q->next)
    {
        q=q->next;
        printf("%d ",q->e);
    }
    printf("\n");
    
    return 0;
}