Lista problema stampa

di il
2 risposte

Lista problema stampa

Questo programma fa in modo che nella lista che ho creato inserisco dei valori interi manualmente. Pero quando vado a stampare la lista mi stampa tutti i valori tranne l'ultimo inserito.
es: inserisco 1,2,3,4 in fase di stampa mi da: 3,2,1 quando dovrebbe essere 4,3,2,1,
#include <stdio.h>
#include <stdlib.h>


/*--------------------------------------------------------------NODO---------*/
typedef struct s_nodo{
    int informazione;
    struct s_nodo* next;
}t_nodo;

/*-------------------------------------------------PUNTATORE AL NODO---------*/

typedef t_nodo* p_nodo;


/*-------------------------------------------------------------LISTA---------*/
typedef struct s_lista{
    /*puntatore al primo nodo della lista*/
    p_nodo testa;

    /*numero di elementi*/
    int N;
}t_lista;

/*------------------------------------------------PROTOTIPI FUNZIONI---------*/

t_lista crealista();

t_lista aggiungiInTesta(t_lista lista,int valore);

void stampaLista(t_lista l);



/*-------------------------------------------------------------MAIN----------*/
int main()
{
    t_lista l;
    int val;
    int i;
    int A;/*varibile usa e getta*/

    l=crealista();
    printf("quanti numeri vuoi inserire nella lista\n");
    scanf("%d",&val);

    for(i=0;i<val;i++){
        printf("\ninserire un valore\n");
        scanf("%d",&A);
        l=aggiungiInTesta(l,A);
    }
    stampaLista(l);

    return 0;
}
/*------------------------------------------IMPLEMENTAZIONI FUNZIONI----------*/

t_lista crealista(){
    t_lista ris;
    ris.N=0;
    ris.testa=NULL;
    return ris;
}


t_lista aggiungiInTesta(t_lista lista,int valore){
    p_nodo p1;
    p_nodo nuovonodo;
    p1= lista.testa;
    /*allocazione nuovo nodo*/
    nuovonodo= malloc(sizeof(t_nodo));
    if(nuovonodo==NULL){
        printf("errore diallocazione");
        exit(1);
    }
    /*inserimento nuovo valore in nuovo nodo*/
    nuovonodo->informazione=valore;

    /*aggiornamento dei puntatori*/
    nuovonodo->next=lista.testa;
    lista.testa=nuovonodo;
    return lista;
}

void stampaLista(t_lista l){
    p_nodo p1;
    p1; l.testa;
    while(p1!=NULL){
        printf("%d ",p1->informazione);
        p1=p1->next;
    }
    return;
}

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte