逐个字母地获取双向链表

时间:2015-06-15 18:29:55

标签: c doubly-linked-list abstract-data-type

我正在尝试编写一个程序,在双向链表的每个节点中逐字逐句,然后使用我编写的函数检查该单词是否为回文。

当我编译我的代码时,我在代码中遇到了输入的问题,所以我想知道我该怎么做。

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

1 个答案:

答案 0 :(得分:1)

Llista dadaToList(Dada *node){
    Llista ret = { NULL, NULL, 0};
    if(!node) return ret;

    ret.principi = node;
    ret.nelements = 0;
    while(node->seguent != NULL){
        node = node->seguent;
        ++ret.nelements;
    }
    ret.fin = node;
    return ret;
}

int main(void){
    char c;
    Llista list;
    printf("insertar palabra para comprobar si es palindromo");
    while((c=getchar()) != '\n'){
        InsertAtTail(c);
    }
    list = dadaToList(head);//you need set to `list` from `head`
    if(palindromo(&list))
        printf("palindromo\n");

    //deallocation
    return 0;
}
相关问题