Ciao a tutti, ho provato a fare questo esercizio, il compito era quello di creare due liste in cui inserire i valori pari in una e quelli dispari in un'altra. Il programma funziona, non capisco solamente perchè quando mi stampa le due liste nuove sono al contrario.
#include<stdio.h>
#include<stdlib.h>
#define MINRAND 0
#define MAXRAND 50
typedef struct nodo {
int elemento;
struct nodo *successivo;
} nodo;
nodo* lista_crea(int n, nodo* testa);
void lista_visualizza(nodo*);
void creazione_liste(nodo*, nodo*, nodo*);
int main(int argc, char *argv[]) {
nodo *lista = NULL;
nodo *listapari = NULL;
nodo *listadispari = NULL;
int numero = 0, i=0;
if(argc < 2) { printf("\nArgomento mancante\n"); return 0; }
numero = atoi(argv[1]);
for(i=0; i<numero; i++){
lista = lista_crea(rand()%(MAXRAND-MINRAND+1)+MINRAND, lista);
}
lista_visualizza(lista);
creazione_liste(lista, listapari, listadispari);
return 0;
}
nodo* lista_crea(int n, nodo* testa){
if(testa!=NULL){
nodo* next = testa;
testa = (nodo*)malloc(sizeof(nodo));
testa -> elemento = n;
testa -> successivo = next;
}
else{
testa = (nodo*)malloc(sizeof(nodo));
testa -> elemento = n;
testa -> successivo = NULL;
}
return testa;
}
void lista_visualizza(nodo* lista){
int numEl;
printf("\n======================================\n");
printf("\nLISTA:\t");
for(numEl=0; lista; numEl++){
printf("%d -> ", lista -> elemento);
lista = lista -> successivo;
}
printf("NULL");
if(numEl) printf("\nLa lista contiene %d elementi\n", numEl);
else printf("\nLa lista e' vuota\n");
printf("\n======================================");
return;
}
void creazione_liste(nodo* lista, nodo* listapari, nodo*listadispari){
while(lista!=NULL){
if((lista->elemento)%2 == 0){
listapari = lista_crea(lista->elemento, listapari);
}
else{
listadispari = lista_crea(lista->elemento, listadispari);
}
lista = lista->successivo;
}
lista_visualizza(listapari);
lista_visualizza(listadispari);
}