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;
}