链表完整代码。经测试,应该没什么毛病

#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct student{
    int score;//数据域;
    struct student *next;//指针域;
}Linklist;
Linklist *creat(int n)//创建链表
{
    Linklist *head,*node,*end;
    head=(Linklist*)malloc(sizeof(Linklist));
    end=head;
    for(int i=0;i<n;i++)
    {
        node=(Linklist*)malloc(sizeof(Linklist));
        scanf("%d",&node->score);
        end->next=node;
        end=node;
    }
    end->next=NULL;
    return head;
}
void change(Linklist*list,int n)//修改链表
//n是要修改的第n个节点,因为链表只能顺序访问不能随机访问,不好用,学这个用来入门数据结构
{
    Linklist*t=list;
    int i=0;
    while(i<n&&t!=NULL)//往后移去找第N个节点
    {
        t=t->next;
        i++;
    }
    if(t!=NULL)
    {
        puts("快点地,输入要修改的值");
        scanf("%d",&t->score);
        printf("修改成功\n");
    }
    else puts("***,节点不存在");
}
void delet(Linklist*list,int n)//删除链表中的值
{
    Linklist *t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    {
        in=t;//in指向的一直是现在t所指向的上一个(先让in指向t,再让t指向下一个)
        t=t->next;
        i++;
    }
    if(t!=NULL)
    {
        in->next=t->next;//要删除t,让指向它的指针指向下一个,跳过t就是删除了t;
        free(t);//清除t的内存;
    }
    else puts("***,这个节点不存在");
}
void insert (Linklist*list,int n)//插入链表 (在第n位之后插入值(插完之后是第n+1位))
{
    Linklist*t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    {
        t=t->next;//先找到要插入的位置
        i++;
    }
    if(t!=NULL)
    {
        in=(Linklist*)malloc(sizeof(Linklist));
        puts("请输入要插入的值:");
        scanf("%d",&in->score);
        in->next=t->next;
        t->next=in;
        puts("***去了呢");
    }
    else puts("节点不存在,你别玩我呀");
}
void coutlist(Linklist*head)//输出链表的值;
{
    while(head->next!=NULL)
    {
        head=head->next;
        printf("%d ",head->score);
    }
    printf("\n");
}
void coutlength(Linklist*list)//输出链表的长度(带头结点)
{
    Linklist*t=list;//非空表的情况下指向的是第一个结点而不是头结点
    int ans=0;
    while(t->next)
    {
        t=t->next;
        ans++;
    }
    printf("%d\n",ans);
}
void find(Linklist*lists,int x)//按值查找w
{
    Linklist* t=lists->next;
    while(t!=NULL&&t->score!=x)
        t=t->next;
    if(t!=NULL)printf("太棒了,找到了呢\n");
    return ;
}
void list()//控制面板
{
    printf("这是一个单链表\n------------------------------------------\nPlease press the button:\n");
    printf("Button 1 ---> 创建单链表\n");				//创建单链表 (带头结点、表尾插入)
    printf("Button 2 ---> 获取链表长度\n");				//获取链表长度
    printf("Button 3 ---> 插入结点\n");				//按序号查找
    printf("Button 4 ---> 按值查找\n");				//按值查找
    printf("Button 5 ---> 删除结点\n");		//插入结点
    printf("Button 6 ---> 修改节点\n");				//删除结点
    printf("Button 7 ---> 输出链表的值\n");							//遍历链表
    printf("Button 8 ---> Exit the program\n-----------------------------------\n");					//退出程序
}

int main()
{
    list();
    Linklist*h;
    int n,x,m;
    while(true)
    {
        scanf("%d",&n);
        if(n==1)
        {
            printf("请输入一个数字,创建长度为n的链表:\n请输入要加入链表的数:");
            scanf("%d",&x);
            h=creat(x);
            printf("Please press the button:\n");
        }
        if(n==2)
        {
            printf("单链表的长度是:");
            coutlength(h);
            printf("Please press the button:\n");
        }
        if(n==3)
        {
            printf("你想插到哪儿?(手动滑稽)");
            scanf("%d",&x);
            insert (h,x);
            printf("Please press the button:\n");
        }
        if(n==4)
        {
            printf("请输入你要找的值");
            scanf("%d",&m);
            find(h,m);
            printf("Please press the button:\n");
        }
        if(n==5)
        {
            printf("你敢删谁?有种你试试!\n");
            scanf("%d",&x);
            delet(h,x);
            printf("还真敢呐,太顶了!\n");
            printf("Please press the button:\n");
        }
        if(n==6)
        {
            printf("你要改那个值?");
            scanf("%d",&x);
            change(h,x);
            printf("Please press the button:\n");
        }
        if(n==7)
        {
            coutlist(h);
            printf("Please press the button:\n");
        }
        if(n==8)
        {
            printf("拜拜了您呐\n");
            return 0;
        }
    }
    return 0;
}