Scrivere una funzione f (e main per chiamarla) che riceve un array di 5 interi e alloca una lista di 5 elementi contenente gli elementi dell’array in ordine inverso.

il mio codice è questo ma mi da come errore che non ho inizializzato la variabile locale listak

codice:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

typedef struct elemento {
    int inf;
    struct elemento * pun;
} elemento_lista;

typedef elemento_lista *lista;

lista InsInTesta(lista listak, int elem);
void VisualizzaLista(lista listak);

int main()
{
    int array[5];
    int i = 0;
    
    lista listak;
    
    for (i = 0; i < 5; i++)
    {
        printf("Inserisci l'elemento\n");
        scanf_s("%d", &array[i]);
    }

    listak->inf = array[0];
    listak->pun = NULL;
    for (i = 1; i < 5; i++)
    {
        listak = InsInTesta(listak, array[i]);
    }

    VisualizzaLista(listak);


    _getch();
    return 0;
}

lista InsInTesta(lista listak, int elem) {
    lista punt;
    punt = (lista)malloc(sizeof(elemento));
    punt->inf = elem;
    punt->pun = listak;
    return  punt;
}

void VisualizzaLista(lista listak) {
    if (listak == NULL)
        printf(" ---| \n");
    else {
        printf(" %d\n ---> ", listak->inf);
        VisualizzaLista(listak->pun);
    }
}