Hi I'm trying to insert an element inside a list following a certain order(I have to add a equilateral triangle). When I try to use the code I can insert data(triangle measurements) but when I try to print list nothing appear :/.So I think that I wrote bad something in "inserisciPerPerimetro". Some word is written in italian and this is only a part of the code(two functions to add a triangle in my list),if u have to see also other parts let me know. Thanks all! This is my code:
typedef struct punto {
    int x;
    int y;
} PUNTO;
typedef struct triangolo {
    PUNTO v;
    int lato;
} TRIANGOLO;
typedef struct nodo {
    TRIANGOLO t;
    struct nodo *next;
} NODO;
int perimetro(TRIANGOLO t) {
    return t.lato*3;
}
void stampaTriangolo(TRIANGOLO t) {
    printf("Il triangolo ha il lato uguale a: %d con un perimetro pari a %d, il vertice in alto ha coordinate (%d,%d)\n",
    t.lato, perimetro(t),t.v.x,t.v.y);
}
void stampaLista(NODO *head) {
    if(head->next==NULL) {
        printf("Lista vuota!\n");
    } else {
        while(head->next != NULL) {
            head = head->next;
            stampaTriangolo(head->t);
        }
    }
}
TRIANGOLO creaTriangolo() {
    TRIANGOLO nuovo;
    printf("Inserisci il lato del nuovo triangolo: ");
    scanf("%d", &nuovo.lato);
    printf("\n");
    printf("Inserisci le coordinate del vertice con y maggiore:\n");
    printf("x: ");
    scanf("%d",&nuovo.v.x);
    printf("\n");
    printf("y: ");
    scanf("%d",&nuovo.v.y);
    printf("\n");
    
    return nuovo;
}
void inserisciPerPerimetro(NODO *head) {
    NODO* nuovoNodo;
    nuovoNodo = malloc(sizeof(NODO));
    nuovoNodo->t = creaTriangolo();
    nuovoNodo->next = NULL;
    
    if(head==NULL) {
        head = nuovoNodo;
    } else {
        //Ordinamento per perimetro crescente
        while(head->next != NULL) 
            if(perimetro(nuovoNodo->t) < perimetro(head->t)) {
                nuovoNodo->next = head->next;
                head->next = nuovoNodo;
            } else {
                head = head->next;
            }
        
        printf("Inserimento effettuato!\n");
    }
}
int main() {
    /* inizializza la lista */
    NODO *head = malloc(sizeof(NODO));
    head->next = NULL;
    
    int risposta = -1;          // per interazione con utente
    while(risposta != 0) {
        /* richiedi un'operazione all'utente */
        printf("Che operazione vuoi svolgere?\n");
        printf("1 -> Inserisci un triangolo nella lista ordinata secondo il perimetro crescente\n");
        printf("2 -> Cancella il triangolo in testa alla lista\n");
        printf("3 -> Visualizza la lista di triangoli\n");
        printf("0 -> Termina il programma\n");
        scanf("%d", &risposta);
        /* gestisci le operazioni dell'utente */
        if(risposta==1) {
            inserisciPerPerimetro(head);
        }
        //else if(risposta==2)
            //lista = cancellazione(lista);
        else if(risposta==3) {
            stampaLista(head);
        }
        else if(risposta==0) {
            printf("Finito!\n\n");
        }
        else {
            printf("Selezione non valida!\n\n");
        }
    }
}
 
    