利用链表判断回文,那里出错了?
输入字符,判断是不是回文,如abba是回文,以"@"为结束符
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{datatype data;
struct node *next;
}linklist;
linklist *CREATLIST()
{char ch; ///尾插法建立链表
linklist *head,*s,*r;
head=NULL;
r=NULL;
ch=getchar();
while(ch!='@')
{s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
if(head==NULL) head=s;
else r->next=s;
r=s;
ch=getchar();
}
if(r!=NULL)r->next=NULL;
return head;
}
linklist *PANDUAN(linklist *pp) /*定义判断是否为回文的函数*/
{
linklist *s,*p,*q;
p=s=q=pp->next;
while(s!=NULL) /*s非空*/
{
if(s->data==q->data) /*s的data与q的data相同*/
{
s=s->next;/*对s复位*/
p=s;
q=p->next; /*相同则s移后一位,q移前一位*/
while(q->next!=NULL)
{
p=p->next;
q=q->next;
}
p->next=NULL;
q=p; /*对q复位*/
}
else break;
}
if(s==NULL) printf("yes\n"); /*s最终为空,则判断为回文*/
else printf("no\n");
}
main()
{
printf("input the data of the linklist!\n");
linklist *head;
head=CREATLIST();
PANDUAN(head);
while(1);
}
怎么样都是输出no
只有输入一个字符时才判断是回文
那里出错了?
新人分少,只有10分,那位帮忙看看。