为什么插入和删除后的链表输出不了?

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#define ERROR 0
#define OK 1

typedef struct Stu_Node {
    char name[20];
    int number;
    float score;
    struct Stu_Node* next;
}Stu_Node, * LinkList;
//初始化
LinkList InitList(LinkList L)
{
    L = (LinkList)malloc(sizeof(Stu_Node));
    L->next = NULL;
    return L;
}
//头插
void CreateFromHead(LinkList L)
{
    Stu_Node* s;
    int flag = 1;
    char name[20];
    int number;
    float score;

    while (flag)
    {

        printf("请输入学生信息:");
        scanf("%s %d %f", &name, &number, &score);
        if (name != '$' && number != 0 && score != 0)
        {
            s = (Stu_Node*)malloc(sizeof(Stu_Node*));
            strcpy(s->name, name);
            s->number = number;
            s->score = score;
            s->next = L->next;
            L->next = s;
        }
        else flag = 0;
    }
}

//查找
//查找第i个结点,
Stu_Node* Get(LinkList L, int i)
{
    Stu_Node* p;
    int j = 1;
    p = L;
    while (p->next != NULL && j < i)
    {
        p = p->next;
        j++;
    }
    if (i == j)
    {
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
    }
    else
        return NULL;
}
//查找值等于key的结点
Stu_Node* Locate(LinkList L, int number)
{
    Stu_Node* p;
    p = L->next;
    while (p != NULL)
    {
        if (p->number != number)
            p = p->next;
        else
            break;
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
    }
    
    

}
//插入
int InsList(LinkList L, int i, char name, int number, float score)
{
    Stu_Node* pre, * s;
    int k;
    pre = L;
    k = 0;
    while (pre != NULL && k < i - 1)
    {
        pre = pre->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("插入的位置不合理");
        return ERROR;
    }
    s = (Stu_Node*)malloc(sizeof(Stu_Node*));
    strcpy(s->name, name);
    s->number = number;
    s->score = score;
    s->next = pre->next;
    pre->next = s;
    return OK;
}
//删除
int DelList(LinkList L, int i, char *name,int *number,float *score)
{
    Stu_Node* p, * r;
    int k;
    p = L;
    k = 0;
    while (p->next != NULL && k < i - 1)
    {
        p = p->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("删除结点的位置i不合理");
        return ERROR;
    }
    r = p->next;
    p->next = p->next->next;
    *name = r->name;
    *number = r->number;
    *score = r->score;
    free(r);
    return OK;
}
//求链表长度
int ListLength(LinkList L)
{
    Stu_Node* p;
    p = L->next;
    int j = 0;
    while (p != NULL)
    {
        p = p->next;
        j++;
    }
    printf("学生的总人数为%d", j);
    return j;
}


//输出
void Printlist(LinkList L)
{
    printf("学生链表的内容为:\n");
    printf("姓名 学号 成绩\n");
    L = L->next;
    while (L != NULL)
    {

        printf("%s %d %f\n", L->name, L->number, L->score);
        L = L->next;
    }

}

int main()
{
    LinkList L = NULL;
    int i;
    int x;
    char name;
    int number;
    float score;
    char *name1=NULL;
    int *number1=NULL;
    float *score1=NULL;
    L = InitList(L);
    
    printf("头插法创建学生链表\n");
    CreateFromHead(L);
    Printlist(L);
    
    printf("请输入要查询学生的序号:");
    scanf("%d", &i);
    Get(L,i);
    
    printf("请输入要查询的学生的学号:");
    scanf("%d", &number);
    Locate(L,number);
    
    printf("请输入要插入的位置及要插入的学生信息:");
    scanf("%d %s %d %f", &x, &name, &number, &score);
    InsList(L, x, name, number, score);
    Printlist(L);
    
    printf("请输入要删除的学生序号及信息:");
    scanf("%d &s %d %f",&i,&name, &number,&score);
    DelList(L, i, name1, number1, score1);
    Printlist(L);
    
    ListLength(L);





}

if (name != '$' && number != 0 && score != 0) 这都不对的。name是字符串,'$'是字符啊。



#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#define ERROR 0
#define OK 1
typedef struct Stu_Node {
    char name[20];
    int number;
    float score;
    struct Stu_Node* next;
}Stu_Node, * LinkList;
//初始化
LinkList InitList(LinkList L)
{
    L = (LinkList)malloc(sizeof(Stu_Node));
    L->next = NULL;
    return L;
}
//头插
void CreateFromHead(LinkList L)
{
    Stu_Node* s;
    int flag = 1;
    char name[20];
    int number;
    float score;
    while (flag)
    {
        printf("请输入学生信息:");
        scanf("%s %d %f", &name, &number, &score);
        if (strcmp(name,"$") != 0 && number != 0 && score != 0)
        {
            s = (Stu_Node*)malloc(sizeof(Stu_Node));
            strcpy(s->name, name);
            s->number = number;
            s->score = score;
            s->next = L->next;
            L->next = s;
        }
        else flag = 0;
    }
}
//查找
//查找第i个结点,
Stu_Node* Get(LinkList L, int i)
{
    Stu_Node* p;
    int j = 1;
    p = L;
    while (p->next != NULL && j < i)
    {
        p = p->next;
        j++;
    }
    if (i == j)
    {
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
        return p;
    }
    return NULL;
}
//查找值等于key的结点
Stu_Node* Locate(LinkList L, int number)
{
    Stu_Node* p;
    p = L->next;
    while (p != NULL)
    {
        if (p->number != number)
            p = p->next;
        else
            break;
    }
    if(p!=NULL)
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
    return p;
}
//插入
int InsList(LinkList L, int i, char *name, int number, float score)
{
    Stu_Node* pre, * s;
    int k;
    pre = L;
    k = 0;
    while (pre != NULL && k < i - 1)
    {
        pre = pre->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("插入的位置不合理");
        return ERROR;
    }
    s = (Stu_Node*)malloc(sizeof(Stu_Node));
    strcpy(s->name, name);
    s->number = number;
    s->score = score;
    s->next = pre->next;
    pre->next = s;
    return OK;
}
//删除
int DelList(LinkList L, int i, char name[],int *number,float *score)
{
    Stu_Node* p, * r;
    int k;
    p = L;
    k = 0;
    while (p->next != NULL && k < i - 1)
    {
        p = p->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("删除结点的位置i不合理");
        return ERROR;
    }
    r = p->next;
    p->next = p->next->next;
    strcpy(name,r->name);
 //   name = r->name;
    *number = r->number;
    *score = r->score;
    free(r);
    return OK;
}
//求链表长度
int ListLength(LinkList L)
{
    Stu_Node* p;
    p = L->next;
    int j = 0;
    while (p != NULL)
    {
        p = p->next;
        j++;
    }
    printf("学生的总人数为%d", j);
    return j;
}
//输出
void Printlist(LinkList L)
{
    printf("学生链表的内容为:\n");
    printf("姓名 学号 成绩\n");
    L = L->next;
    while (L != NULL)
    {
        printf("%s %d %f\n", L->name, L->number, L->score);
        L = L->next;
    }
}
int main()
{
    LinkList L = NULL;
    int i;
    int x;
    char name[20];
    int number;
    float score;
    char name1[20];
    int *number1=NULL;
    float *score1=NULL;
    L = InitList(L);
    printf("头插法创建学生链表\n");
    CreateFromHead(L);
    Printlist(L);
    printf("请输入要查询学生的序号:");
    scanf("%d", &i);
    Get(L,i);
    printf("请输入要查询的学生的学号:");
    scanf("%d", &number);
    Locate(L,number);
    printf("请输入要插入的位置及要插入的学生信息:");
    scanf("%d %s %d %f", &x, &name, &number, &score);
    InsList(L, x, name, number, score);
    Printlist(L);
    printf("请输入要删除的学生序号及信息:");
    scanf("%d &s %d %f",&i,&name, &number,&score);
    DelList(L, i, name1, number1, score1);
    Printlist(L);
    ListLength(L);
}