请问各位,下面的这个代码有啥问题啊 我想实现c语言顺序链式表的增删减查,但是不知道哪一步错了,出不了结果,卡了一个多小时了

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<stdlib.h>
typedef int Az;
typedef struct man {
int data;
struct man size;
}List;
int main()
{List createList();
struct man
createNode();
List find(List l,int x);
List insert(List l,int x,int i);
Az cha(List l,int p);
bool ListDelete_L(List L,int i,int e);
int len(List l);
List k,t;
int e;
int v,m,s,n,h,y,i,f,b;
createList();
k=createNode();
t=k;
printf("你想进行什么操作?");
printf("增输入2,删输入3,检输入4,查输入5,结束输入0");
scanf("%d",&v);
while(v)
{
if(v==2)
{printf("请输入你要插入的数字:");
scanf("%d",&n);
printf("请输入你要插入的位置:");
scanf("%d",&h);
insert(k,n,h);
}
if(v==3)
{printf("请输入你要删除的位置:");
scanf("%d",&y);
for(i=0;i<=y;i++)
t=t->size;
ListDelete_L (k,y,t->data);
}
if(v==4)
{printf("请输入你要查询的数字:");
scanf("%d",&m);
find(k,m);
}
if(v==5)
{printf("请输入你要查询的位置:");
scanf("%d",&m);
cha(k,m) ;
}
printf("请再次输入数字:");
scanf("%d",&v);
for(e=0;e<=99;e++)
{t=k;
printf(" %d",t->data);
t=t->size;
}}
printf("该列表的长度为:%d",len(k));
return 0;
}
List createList()
{struct man
headNode;
headNode = (struct man*)malloc(sizeof(struct man));
headNode->size = NULL;
return headNode;
}
struct man* createNode()
{int i;
struct man* newNode = (struct man*)malloc(sizeof(struct man));
for(i=0;i<=99;i++)
{
newNode->data = i;
newNode=newNode->size;
}
newNode->size = NULL;
return newNode;
}

int len(List l)
{
List p;
int cut=0;
p=l;
while(p)
{p=p->size;
cut++;
}
return cut;
}
List find(List l,int x)
{int i;
List p=l;
for(i=0;i<=99;i++)
{
if(p&&p->data!=x) p=p->size;}
if(p) return p;
else return NULL;
}
Az cha(List l,int p)
{List m;
int cnt=1;
m=l;
while(m&&cnt<p){
m=m->size;
cnt++;
}
if((cnt==p)&&m)
return m->data;
else return -1;
}
List insert(List l,int x,int i)
{
List tmp,pre;
tmp=(List)malloc(sizeof(struct man));
tmp->data=x;
if(i==1){
tmp->size=l;
return tmp;
}
else{
int cnt=1;
pre=l;
while(pre&&cnt<i-1)
{
pre=pre->size;
cnt++;
}
if(pre==NULL||cnt!=i-1)
{
printf("插入参数错误");
free(tmp);
return NULL;
}
else {
tmp->size=pre->size;
pre->size=tmp;
return l;
}
}
}
bool ListDelete_L (List L,int i,int e)
{ int j;
List p,q;
p=L ;
j=0;
while (p->size && j<i-1)
{
p=p->size;
j++;
}
if (!(p->size)||j>i-1)
return false;
else {
q=p->size;
e=q->data;
p->size=q->size;
free(q);
return true;
}
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
typedef int Az;
typedef struct man {
    int    data;
    struct man* size;
}List;
int main()
{
    List* createList();
    struct man* createNode();
    List* find(List* l, int x);
    List* insert(List* l, int x, int i);
    Az cha(List* l, int p);
    List* ListDelete_L(List * L, int i, int* e);
    int len(List* l);
    List *k, *t;
    int e;
    int v, m, s, n, h, y, i, f, b;
    k = createList();
    k->size = createNode();
    t = k;
    printf("你想进行什么操作?");
    printf("增输入2, 删输入3, 按数字检输入4, 按位置查输入5, 结束输入0\n");
    scanf("%d", &v);
    while (v)
    {
        if (v == 2)
        {
            printf("请输入你要插入的数字:");
            scanf("%d", &n);
            printf("请输入你要插入的位置:");
            scanf("%d", &h);
            k = insert(k, n, h);
        }
        if (v == 3)
        {
            printf("请输入你要删除的位置:");
            scanf("%d", &y);
            //for (i = 0; i <= y; i++)
            //    t = t->size;
            k = ListDelete_L(k, y, &e);
            if (e < 0)
                printf("删除未成功\n");
            else
                printf("删除数:%d\n", e);
        }
        if (v == 4)
        {
            printf("请输入你要查询的数字:");
            scanf("%d", &m);
            t = find(k, m);
            if (!t)
                printf("未找到查询的数字.\n");
            else
                printf("%d\n", t->data);
        }
        if (v == 5)
        {
            printf("请输入你要查询的位置:");
            scanf("%d", &m);
            e = cha(k, m);
            if (e < 0)
                printf("未找到查询的位置\n");
            else
                printf("%d\n", e);
        }
        t = k;
        while(t->size)
        {
            printf(" %d", t->size->data);
            t = t->size;
        }
        printf("\n请再次输入数字:");
        scanf("%d", &v);
    }
    printf("该列表的长度为:%d", len(k));
    return 0;
}
List *createList()
{
    struct man *headNode;
    headNode = (struct man*)malloc(sizeof(struct man));
    headNode->size = NULL;
    return headNode;
}
struct man* createNode()
{
    int i;
    struct man* p = NULL, * q = NULL;
    for (i = 0; i <= 99; i++)
    {
        struct man* newNode = (struct man*)malloc(sizeof(struct man));
        newNode->data = i;
        newNode->size = NULL;
        if (p == NULL)
            p = newNode;
        else
            q->size = newNode;
        q = newNode;
    }
    return p;
}

int len(List* l)
{
    List* p;
    int cut = 0;
    p = l;
    while (p->size)
    {
        p = p->size;
        cut++;
    }
    return cut;
}
List* find(List* l, int x)
{
    int i;
    List* p = l;
    while (p->size && p->size->data != x) p = p->size;
    if (p->size) 
        return p->size;
    else 
        return NULL;
}
Az cha(List* l, int p)
{
    List* m;
    int cnt = 0;
    m = l;
    while (m->size && cnt < p) {
        m = m->size;
        cnt++;
    }
    if (cnt == p)
        return m->data;
    else 
        return -1;
}
List* insert(List* l, int x, int i)
{
    List *tmp, *pre;
    tmp = (List*)malloc(sizeof(struct man));
    tmp->data = x;
    if (i <= 1) {
        tmp->size = l->size;
        l->size = tmp;
        //return tmp;
    }
    else {
        int cnt = 0;
        pre = l;
        while (pre->size && cnt < i)
        {
            pre = pre->size;
            cnt++;
        }
        if (pre == NULL || cnt != i)
        {
            printf("插入参数错误\n");
            free(tmp);
            //return NULL;
        }
        else {
            tmp->size = pre->size;
            pre->size = tmp;
            //return l;
        }
    }
    return l;
}
List*  ListDelete_L(List* L, int i, int *e)
{
    List* tmp, * pre;
    if (i <= 1) {
        tmp = L->size;
        (*e) = tmp->data;
        L->size = tmp->size;
        free(tmp);
    }
    else {
        int cnt = 1;
        pre = L;
        while (pre->size && cnt < i)
        {
            pre = pre->size;
            cnt++;
        }
        if (pre->size == NULL)
        {
            printf("删除参数错误\n");
            (*e) = -1;
        }
        else {
            tmp = pre->size;
            (*e) = tmp->data;
            pre->size = tmp->size;
            free(tmp);
        }
    }
    return L;
}