I'm trying to write a program that takes a word letter by letter in every node of a doubly linked list and then with a function I wrote it will check if the word is a palindrome.
When I compile my code I'm having problems in the part of the code it takes the input, so I would like to know how I can do it.
int main(){
char c;
Llista * list;
Dada head = {0, NULL, NULL};
printf("insertar palabra para comprobar si es palindromo");
while((c=getchar()) != '\n'){
InsertAtTail(c);
}
palindromo(list);
return 0;
}
This is all the code i have written:
#include <stdio.h>
#include <stdlib.h>
typedef struct dada{
char c;
struct dada *seguent;
struct dada *anterior;
}Dada;
typedef struct lista{
Dada *principi;
Dada *fin;
unsigned nelements;
}Llista;
int palindromo(Llista * lista);
struct dada* GetNewNode(char x);
void InsertAtTail(char x);
struct dada* head;
int main(){
char c;
Llista * list;
Dada head = {0, NULL, NULL};
printf("insertar palabra para comprobar si es palindromo");
while((c=getchar()) != '\n'){
InsertAtTail(c);
}
palindromo(list);
return 0;
}
void InsertAtTail(char x) {
struct dada* temp = head;
struct dada* newNode = GetNewNode(x);
if(head == NULL) {
head = newNode;
return;
}
while(temp->seguent != NULL) temp = temp->seguent;
temp->seguent = newNode;
newNode->anterior = temp;
}
struct dada* GetNewNode(char x) {
struct dada* newNode
= (struct dada*)malloc(sizeof(struct dada));
newNode->c = x;
newNode->seguent = NULL;
newNode->anterior = NULL;
return newNode;
}
int palindromo(Llista * lista){
int palindromo = 0;
int descartado = 0;
Dada *aux = lista->principi;
Dada *aux2 = lista->fin;
while(aux->seguent != aux2->anterior && descartado==0){
if(aux->c != aux2->c){
descartado = 1;
}
else{
aux = aux->seguent;
aux2 = aux2->anterior;
}
}
if(descartado==1){
palindromo=0;
}
else{
palindromo=1;
}
return palindromo;
}