Codice originale
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
struct dato {
int info;
struct dato *next;
};
struct dato *testa=NULL;
int n;
struct dato * inserimento (struct dato *, int);
int listavuota (struct dato *);
void visualizza (struct dato *);
int main()
{
printf("Inserisci dei numeri (per terminare digita 0): ");
while (n!=0)
{
scanf("%d", &n);
testa=inserimento(testa,n);
}
visualizza(testa);
system("PAUSE");
return 0;
}
int listavuota (struct dato * testa)
{
if (testa==NULL)
return 1;
return 0;
}
struct dato * inserimento (struct dato *testa, int n)
{
struct dato *punt;
if(listavuota(testa))
{
punt=(struct dato *)malloc(sizeof(struct dato));
punt->info=n;
punt->next=NULL;
return punt;
}
else
{
testa->next=inserimento(testa->next,n);
return testa;
}
}
void visualizza (struct dato *testa)
{
printf("-->%d", testa->info);
testa=testa->next;
}
Ecco gli errori:
1. Non hai inizializzato n (per questo non partiva)
2. La funzione visualizza, visualizzava soltanto il primo elemento della lista
3. Nella lista veniva inserito anche 0
Dopo queste correzioni il programma funziona correttamente, non hai fatto alcun errore nella funzione ricorsiva . Ecco il codice corretto:
#include <stdlib.h>
#include <stdio.h>
struct dato {
int info;
struct dato *next;
};
struct dato *testa=NULL;
int n = 1;
struct dato * inserimento (struct dato *, int);
int listavuota (struct dato *);
void visualizza (struct dato *);
int main()
{
printf("Inserisci dei numeri (per terminare digita 0): ");
while(n)
{
scanf("%d", &n);
if(n) testa=inserimento(testa,n);
}
visualizza(testa);
system("PAUSE");
return 0;
}
int listavuota (struct dato * testa)
{
if (testa==NULL)
return 1;
return 0;
}
struct dato * inserimento (struct dato *testa, int n)
{
struct dato *punt;
if(listavuota(testa))
{
punt=(struct dato *)malloc(sizeof(struct dato));
punt->info=n;
punt->next=NULL;
return punt;
}
else
{
testa->next=inserimento(testa->next,n);
return testa;
}
}
void visualizza (struct dato *testa)
{
struct dato *punt = testa;
while(punt) printf(" --> %d",punt -> info), punt = punt -> next;
}
p.s. E' inutile che includi iostream, se poi includi stdlib e stdio