链表头插法怎么写呀?

链表头插怎么插呀?
代码一直跑不起来
可以帮忙改一下代码?

#include
#include
#define MaxSize 100
#define ElemType int
#define Status int

typedef struct LNode
{
    ElemType data;//数据域
    struct LNode* next;//指针域
}LNode, * LinkList;
//**************************基本操作函数***************************//
//初始化函数
Status InitList(LinkList& L)
{
    L = new LNode;//生成头结点 这样删除等操作就不必分第一个结点和其他了
    L->next = NULL;
    return 1;
}
//获取单链表长度 头结点无数据,不算

int CreatList(LinkList &L,int i)
{    
    LinkList p = L->next; 
    for (int j = 1; j < i; j++)//循环创建结点
    {
        p= new LNode;
        scanf_s("%d", &p->data);
         p->next=L->next;
         L->next = p;
    }
    return 1;
}

int ListLength(LinkList L)
{
    LinkList p = L; int sum = 0;
    while (p)
    {
        sum++;
        p = p->next;
    }
    return sum - 1;//去除头结点
}
//插入函数--后插法 插入到第i(1<=i<=length+1)个位置 即i-1之后 不必区分i的位置
Status ListInsert(LinkList& L, int i, ElemType e)
{
    LNode* s; LinkList p = L; int j = 0;
    while (p && (j < i - 1))//j指到i-1位置或者p已经到最后时跳出
    {
        p = p->next;
        ++j;
    }
    if (!p || j > i - 1)//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率
    {
        printf("插入位置无效!!!\n");
        return false;
    }
    s = new LNode;
    s->data = e;
    s->next = p->next;
    p->next = s;
    return true;
}
//删除函数 删除位置i的结点 即删除i-1之后的结点
Status ListDelete(LinkList& L, int i)
{
    LNode* s; LinkList p = L; int j = 0;
    LinkList q;
    while (p->next && (j < i - 1))//j指到i-1位置
    {
        p = p->next;
        ++j;
    }
    if (!(p->next) || j > i - 1)//i<1或者i>ListLength(L)时,删除位置无效
    {
        printf("删除位置无效!!!\n");
        return false;
    }
    q = p->next;
    p->next = q->next;
    free(q);//释放空间
    return true;
}
//查找函数 按值查找 查找第一个等于e的结点 成功返回该结点指针,否则返回NULL
LNode* LocateElem(LinkList L, ElemType e)
{ 
    LinkList p;
    p= L->next;
    while (p && (p->data != e))
    {
        p = p->next;
    }
    return p;
}
//**************************功能实现函数**************************//
//遍历输出函数
void PrintList(LinkList L)
{
    LinkList p = L->next;//跳过头结点
    if (ListLength(L))
    {
        printf("当前单链表所有元素:");
        while (p)
        {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("\n");
    }
    else
    {
        printf("当前单链表已空!\n");
    }
}
//插入功能函数 调用ListInsert后插
void Create(LinkList L)
{
    int i; ElemType e; bool flag;
    printf("请输入要创建的顺序表长度:");
    scanf_s("%d", &i);
    printf("请输入%d个数:",i);
    flag = CreatList(L, i);
    if (flag) {
        printf("创建成功!\n");
        PrintList(L);
    }
    else printf("输入长度错误!\n");

}

void Insert(LinkList& L)
{
    int place; ElemType e; bool flag;
    printf("请输入要插入的位置(从1开始)及元素:\n");
    scanf_s("%d%d", &place, &e);
    flag = ListInsert(L, place, e);
    if (flag)
    {
        printf("插入成功!!!\n");
        PrintList(L);
    }
}
//删除功能函数 调用ListDelete删除
void Delete(LinkList L)
{
    int place; bool flag;
    printf("请输入要删除的位置(从1开始):\n");
    scanf_s("%d", &place);
    flag = ListDelete(L, place);
    if (flag)
    {
        printf("删除成功!!!\n");
        PrintList(L);
    }
}
//查找功能函数 调用LocateElem查找
void Search(LinkList L)
{
    ElemType e; LNode* q;
    printf("请输入要查找的值:\n");
    scanf_s("%d", &e);
    q = LocateElem(L, e);
    if (q)
    {
        printf("找到该元素!\n");
    }
    else
        printf("未找到该元素!\n");
}
//菜单
void menu()
{
    printf("********1.插入    2.删除*********\n");
    printf("********3.查找    4.输出*********\n");
    printf("********5.退出    5.创建*********\n");
}
//主函数
int main()
{
    LinkList L; int choice;
    InitList(L);
    while (1)
    {
        menu();
        printf("请输入菜单序号:\n");
        scanf_s("%d", &choice);
        if (choice == 5) break;
        switch (choice)
        {
        case 1:Insert(L); break;
        case 2:Delete(L); break;
        case 3:Search(L); break;
        case 4:PrintList(L); break;
        case 5:Create(L); break;
        default:printf("输入错误!!!\n");
        }
    }
    return 0;
}

s = new LNode;
这语法都不对,你都不看错误信息的吗,根据错误信息一个一个的改呀

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^