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