获取逐个字母一个双向链表 [英] Get letter by letter to a doubly linked list
本文介绍了获取逐个字母一个双向链表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图写一个程序,需要一个字信字母双向链表的每个节点,然后用我写它会检查,如果字是回文的功能。
当我编译我有在code时需输入的部分问题,我的code,所以我想知道我怎么能做到这一点。
INT的main(){
焦炭℃;
Llista *名单;
达达头= {0,NULL,NULL};
的printf(insertar言论报第comprobar SI ES回文);
而((C =的getchar())!='\\ n'){
InsertAtTail(C);
} 回文(名单); 返回0;
}
这是所有code I采写:
的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;typedef结构达达{焦炭℃;
达达结构* seguent;
达达结构*前;}达达;
typedef结构{LISTA达达*普林西;
达达*鳍;
无符号nelements;} Llista;INT回文(Llista * LISTA);
达达结构* GetNewNode(字符x)的;
无效InsertAtTail(字符x)的;
达达结构*头;诠释主(){
焦炭℃;
Llista *名单;
达达头= {0,NULL,NULL};
的printf(insertar言论报第comprobar SI ES回文);
而((C =的getchar())!='\\ n'){
InsertAtTail(C);
} 回文(名单); 返回0;
}无效InsertAtTail(字符X){
达达结构* TEMP =头;
达达结构* newNode = GetNewNode(X);
如果(头== NULL){
头= newNode;
返回;
}
而(TEMP-GT&;!seguent = NULL)临时= TEMP-GT&; seguent;
TEMP-GT&; seguent = newNode;
newNode->前面=温度;
}
达达结构* GetNewNode(字符X){
达达结构* newNode
=(达达结构*)malloc的(的sizeof(结构达达));
newNode-> C = X;
newNode-> seguent = NULL;
newNode->前面= NULL;
返回newNode;
}INT回文(Llista * LISTA){
INT回文= 0;
INT descartado = 0;
达达* AUX = lista->普林西;
达达* AUX2 = lista->尾翼; 而(AUX->!seguent = aux2->及前放;&安培; descartado == 0){
如果(AUX-> C = aux2->!C){
descartado = 1;
}
其他{
AUX = AUX-> seguent;
AUX2 = aux2->前路;
}
}
如果(descartado == 1){
回文= 0;
}
其他{
回文= 1;
}
返回回文;
}
解决方案
Llista dadaToList(达达*节点){
Llista RET = {NULL,NULL,0};
如果返回RET(节点!); ret.principi =节点;
ret.nelements = 0;
而(与于节点GT;!seguent = NULL){
节点=&于节点GT; seguent;
++ ret.nelements;
}
ret.fin =节点;
返回RET;
}诠释主要(无效){
焦炭℃;
Llista清单;
的printf(insertar言论报第comprobar SI ES回文);
而((C =的getchar())!='\\ n'){
InsertAtTail(C);
}
清单= dadaToList(头); //你需要从`head`设为`list`
如果(回文(安培;列表))
的printf(回文\\ n); //释放
返回0;
}
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;
}
解决方案
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;
}
这篇关于获取逐个字母一个双向链表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文