用鏈表和鏈棧判斷回文,問題在哪,急! -开发者知识库

用鏈表和鏈棧判斷回文,問題在哪,急! -开发者知识库,第1张

回文及從前往后和從后往前一樣,如1234321等
下面程序問題在哪?各位大俠幫忙

#include<stdio.h>
#include<malloc.h>

#define True  1
#define False 0

typedef struct Node//鏈表節點定義
{
char data;
struct Node *next;
}Node,*Linklist;

typedef struct node//棧節點定義
{
char data;
struct node *next;
}LinkStackNode,*LinkStack;

Linklist Initlist()//鏈表初始化
{
Linklist L;
L=(Linklist)malloc(sizeof(Node));
L->next=NULL;
return L;
}

void CreatFromTail(Linklist L)//尾插法形成鏈表
{
Node *r,*s;
int flag=1;
r=L;
while(flag)
{
char c=getchar();
if(c!='\n')
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else 
{
flag=0;
r->next=NULL;
}
}
}

LinkStack InitStack()//鏈棧初始化
{
LinkStack L;
L=(LinkStack)malloc(sizeof(LinkStackNode));
L->next=NULL;
return L;
}


int Push(LinkStack top,char x)//入棧
{
LinkStackNode *temp;
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
if(temp==NULL)return (False);
temp->data=x;
temp->next=top->next;
top->next=temp;
return(True);
}

int Pop(LinkStack top,char *x)//出棧
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)return (False);
top->next=temp->next;
*x=temp->data;
free(temp);
return(True);
}


void main()
{
Linklist L0=Initlist();//鏈表L0
LinkStack L1=InitStack();//鏈棧L1
    char *s;
int flag;//標識符
Node *p;//遍歷鏈表的指針
printf("         此程序用於檢驗您輸入的字符串是否是回文\n");
printf("請輸入一個字符串:\n");
CreatFromTail(L0);

    p=L0->next;
while(p!=NULL)//L0元素入棧
{
Push(L1,p->data);
p=p->next;
}

p=L0->next;//下面是L1出棧,與L0比較,判斷回文
while(p!=NULL)// 好像是這塊錯了,具體看不出來哪 {
Pop(L1,s);
if(*s==p->data)
flag=1;
else flag=0;
p=p->next;
}

if(flag==1)
printf("您輸入的是一個回文!");
else if(flag==0)
printf("您輸入的不是一個回文!");
}

10 个解决方案

#1


代碼沒看全,不過,
    if(*s==p->data)
        flag=1;
    else flag=0;
每次比較都更新flag顯然錯了。

應該先讓flag賦初值為1,比較時只要有一次不相等,則將flag置0

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复