链表读取访问权限冲突

这个链表我学了好几天了结果还是没学会,搜了好多方法我也还是不知道哪有问题,帮忙挑下错误,谢谢!
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct linkedlist
{
int num;
struct linkedlist* next;
}node;

node* NODE()
{
int Num;
node* head = NULL;
head = (node*)malloc(sizeof(node*));
node* new;

while (1) {
    int a;
    scanf_s("%d", &Num);
    if (Num != 0) {
        new = (node*)malloc(sizeof(node*));
        new->num = Num;
        head->next = new->next;                                                              
        head->next = new;                                                                    
    }
    else goto a;
}

a:
return head;
}

void output(node*head) {
node *put=head->next;

while (put!=NULL)
{
    printf("%d\n", put->num);
    put = put->next;
}

}
int main()
{
node* head=NULL;
head = NODE();
output(head);
}

错误如下:

img

你题目的解答代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct linkedlist
{
    int num;
    struct linkedlist *next;
} node;

node *NODE()
{
    int Num;
    node *head = NULL;
    head = (node *)malloc(sizeof(node *));
    head->next = NULL;  //加上
    node *new;

    while (1)
    {
        int a;
        scanf_s("%d", &Num);
        if (Num != 0)
        {
            new = (node *)malloc(sizeof(node *));
            new->num = Num;
            new->next = head->next; //你new 和 head 写反了;
            head->next = new;
        }
        else
            goto a;
    }
a:
    return head;
}

void output(node *head)
{
    node *put = head->next;

    while (put != NULL)
    {
        printf("%d\n", put->num);
        put = put->next;
    }
}
int main()
{
    node *head = NULL;
    head = NODE();
    output(head);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

修改的部分已经在代码中说明

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

typedef struct linkedlist
{
    int num;
    struct linkedlist* next;
}node;


node* NODE()
{
    int Num;
    node* head = NULL;
    //head = (node*)malloc(sizeof(node*));
    // 分配的应该是node 的空间,而不是 node*的空间 
    head = (node*)malloc(sizeof(node));
    //node* new;
    // 不要使用new作为标识符
    node * newNode; 
    node* now = head;
    

    while (1) {
        int a;
        scanf_s("%d", &Num);
        if (Num != 0) {
            //new = (node*)malloc(sizeof(node*));
            newNode = (node*)malloc(sizeof(node));
            newNode->num = Num;
            newNode ->next = NULL;
            now->next = newNode;                                                              
            now = now -> next;                                                                    
        }
        else goto a;
    }
    a:
    return head;
}

void output(node*head) {
    node *put=head->next;
    while (put!=NULL)
    {
        printf("%d\n", put->num);
        put = put->next;
    }
}

int main()
{
    node* head=NULL;
    head = NODE();
    output(head);
}