Mi sono permesso di sistemarti il codice, con il problema della testa, ciao.

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

#define NUM 10

struct lista_elem {
    int code;
    struct lista_elem *next;
};

typedef struct lista_elem lista_elem_t;

int main()
{
    lista_elem_t *testa, *p;
    int i;

    testa = p = (lista_elem_t *)malloc(sizeof(lista_elem_t));
    p->code = 0;
    
    for (i = 1; i < NUM; i++) {
        p->next = (lista_elem_t *)malloc(sizeof(lista_elem_t));
        p = p->next;
        p->code = i;
        p->next = NULL;
    }

    for (p = testa; p != NULL; p = p->next)
        printf("code: %d\n", p->code);

    return 0;
}