Получить письмо за письмом в двусвязный список
Я пытаюсь написать программу, которая принимает слово буква за буквой в каждом узле двусвязного списка, а затем с помощью написанной мной функции проверит, является ли слово палиндромом.
Когда я компилирую свой код, у меня возникают проблемы в той части кода, которая требует ввода, поэтому я хотел бы знать, как я могу это сделать.
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;
}
Это весь код, который я написал:
#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;
}