Ciao! Mi trovo ad implementare (a scopo puramente accademico) una lista tramite array collegati. Ho trovato in giro il seguente codice:

codice:
#include <stdio.h>
#include <stdlib.h>
#define MAXLS 30

typedef struct elem 
{
    int elem;
    int next;
} ArrLs;

//VARIABILI GLOBALI

ArrLs key[MAXLS];       //Array dati!
int head=0;             //Indice che "punta" al primo elemento della lista!
int freeHead=0;         //Indice che "punta" al primo el. della lista libera!

void insEl(void) 
{
    int elem=0;
    int freeHeadbck=0;
    
    printf("Inserisci un integer > ");
    scanf("%d", &elem);
    
    if(freeHead==-1) {
       printf("Spazio in memoria insufficiente\n");
       return;
    }  
  
    freeHeadbck=freeHead;                        
    freeHead=key[freeHead].next; 
    key[freeHeadbck].elem=elem;   
    key[freeHeadbck].next=head;  
    head=freeHeadbck;
}
Ad ogni inserimento la funzione mi sovrascrive il primo elemento.
Sospetto che l'errore stia da queste parti:
codice:
 freeHead=key[freeHead].next;
Ma non riesco ad uscire fuori dal tunnel! Qualcuno ha qualche idea (oltre al suggerimento di usare lista concatenate) ?

Plz!