不带头结点的单链表,删除最大值数据后的链表打印不了,各位帮我看看原因。

#include"stdio.h"
#include"malloc.h"
typedef struct Node
{
    int data;
    struct Node* next;
}Node;
Node* create(int n)
{
    int x, i;
    Node* h , * s , * head = NULL;
    h = (Node*)malloc(sizeof(Node));
    h->next = NULL;
    head = h;
    printf("请输入第1个数据:");
    scanf_s("%d", &x);
    h->data = x;
    for (i = 2; i <= n; i++)
    {
        printf("请输入第%d个数据:", i);
        scanf_s("%d", &x);
        s = (Node*)malloc(sizeof(Node));
        s->data = x;
        h->next = s;
        h = s;
    }
    return head;
}
void display(Node* L)
{
    Node* k;
    k = L;
    while (k)
    {
        printf("%d    ", k->data);
        k = k->next;
    }
    printf("\n");
}
void dele(Node* L)
{
    Node* p, * q, * r, * s = NULL;
    q = L;
    p = L->next;
    r = L;
    while (p != NULL)
    {
        if (p->data > q->data)
        {
            q = p;
            s = r;
        }
        r = p;
        p = p->next;
    }
    if (q == L)L = L->next;
    else s->next = q->next;
    free(q);
}
int main()
{
    Node* List = (Node*)malloc(sizeof(Node));
    int num;
    printf("请输入数据的个数:");
    scanf_s("%d", &num);
    List = create(num);
    printf("原数据:\n");
    display(List);
    dele(List);
    printf("删除最大值后:\n");
    display(List);
}

img

建议将为节点的地址设为NULL,否则会出现访存错误,若出现访存错误,将create函数返回之前加入h->next=null

第一个节点是最大的话,也会出现问题。