La consegna è questa: Sia data una lista semplicemente concatenata i cui nodi contengano un singolo
carattere. Verificare se la parola rappresentata dalla lista è palindroma.
e io ho scritto questo programma.
#include <stdio.h>
#include <stdlib.h>
typedef struct a{
char info;
struct a * prox;
} nodo;
typedef nodo * ListaDiElem;
int ListaVuota( ListaDiElem lista ) {
return lista == NULL;
}
ListaDiElem InsInTesta ( ListaDiElem lista, char elem ) {
ListaDiElem punt;
punt = (ListaDiElem) malloc(sizeof(nodo));
punt->info = elem;
punt->prox = lista;
return punt;
}
ListaDiElem InsInFondo( ListaDiElem lista, char elem ) {
ListaDiElem punt, cur = lista;
punt = (ListaDiElem) malloc( sizeof(nodo) );
punt->prox = NULL;
punt->info = elem; /* Crea il nuovo nodo */
if ( ListaVuota(lista) )
return punt; /* => punt è la nuova lista */
else {
while( cur->prox != NULL ) /* Trova l’ultimo nodo */
cur = cur->prox;
cur->prox = punt; /* Aggancio all’ultimo nodo */ }
return lista;
}
ListaDiElem Inizializza( void ) {
return NULL;
}
ListaDiElem Reverse1( ListaDiElem lista ) {
ListaDiElem temp = Inizializza(), curr = lista;
while( ! ListaVuota(curr) ) {
temp = InsInTesta( temp, curr->info );
curr = curr->prox; }
}
int LisPal ( ListaDiElem lista ) {
ListaDiElem listainv;
listainv=Reverse1(lista);
while(!ListaVuota(lista)) {
if(((lista->info)-(listainv->info))!=0) return 0;
lista=lista->prox; listainv=listainv->prox; }
return 1;
}
int main() {
char l;
ListaDiElem lista1;
lista1=Inizializza();
printf("Inserire una parola carattere per carattere, 0 per terminare la parola: ");
do {
scanf("%c", &l);
InsInFondo( lista1, l );
} while(l!='0');
printf("\n\n--->%d", LisPal(lista1));
return 0;
}
Non so dove sbaglio.