c语言逆序表的建立简单

输入一个整数n,再输入n个整数,按照输入的顺序建立单链表,并遍历所建立的单链表,输出这些数据。
输入
测试数据有多组,处理到文件尾。每组测试输入一个整数n,再输入n个整数。
输出
对于每组测试,输出顺序链表中的各结点的数据域的值(数据之间留一个空格)。

输入
5 1 2 3 4 5
输出
5 4 3 2 1


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

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

void print(Node *p)
{
    if(p==NULL)return;
    print(p->next);
    printf("%d ", p->num);    
}

int main()
{
    int n, x;
    Node *L = (Node *)calloc(1, sizeof(Node));
    Node *p, *q = L;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &x);
        p = (Node *)calloc(1, sizeof(Node));
        p->num = x;
        q->next = p;
        q = p;
    }

    print(L->next);

    return 0;
}