C语言带头结点链表能编译不能运行

刚学链表,这是一个带头结点链表,能编译但是运行不了,是哪里写错了。


#include <stdio.h>
#include <stdlib.h>
#include <mem.h>
#define Null 0 
typedef struct node
{
    int date;
    struct node* next;
}*point,Node;
int main()
{
    int temp;
    point H,p,pre;
    H = (point)malloc(sizeof(Node));
    printf("请输入数字");
    scanf("%d",&temp);
    while (temp != 0) 
    {
        p = (point)malloc(sizeof(Node));
        p->date = temp;
        pre->next = p;
        pre = p;
        printf("请输入数字");
        scanf("%d", &temp);
    }
    pre->next = Null;
    p = H->next;
    while (p != Null)
    {
        printf("%d", p->next);
        p = p->next;
    }
    return 0;
}

pre->next = p;会崩溃,pre没有赋初始值
在while前,pre = H;
printf("%d", p->next);改为
printf("%d", p->date);
另外,date是日期,data才是数据的意思

#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
    int data;
    struct _node *next;
} node;

int main()
{
    node *head, *prev, *p;
    head = (node *)malloc(sizeof(node));
    head->next = NULL;
    prev = head;
    while (1)
    {
        int data;
        printf("请输入数字: ");
        if (scanf("%d", &data) != 1)
            break;
        if (data == 0)
            break;
        p = (node *)malloc(sizeof(node));
        p->data = data;
        p->next = NULL;
        prev->next = p;
        prev = p;
    }

    p = head->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }

    p = head;
    while (p)
    {
        node *q = p;
        p = p->next;
        free(q);
    }
    printf("\n");

    return 0;
}