【问题描述】对于一个链表,设计一个算法判断其是否为回文结构。如果是请返回true,否则请返回false。
【输入形式】a b c # //输入以#结束
【输出形式】false //或者true
【样例输入】a #
【样例输出】true
【样例说明】
【评分标准】
大概思路是把输入的插入链表中。然后表头和表尾对比。第二个节点和倒数第二个节点对比。依次类推。
#include<iostream>
using namespace std;
typedef struct node
{
char ch;
struct node* next;
}link;
link* inlit(link*&b)
{
link* a = (link*)malloc(sizeof(link));
link* pre, * pt;
pre = a;
char h;
cin >> h;
while (h != '#')
{
pt = (link*)malloc(sizeof(link));
pt->ch = h;
pre->next = pt;
pre = pt;
link* s = (link*)malloc(sizeof(link));
s->next = b->next;
b->next = s;
s->ch = h;
cin >> h;
}
pre->next = NULL;
return a;
}
int main()
{
link* b = (link*)malloc(sizeof(link));
b->next = NULL;
link* a = inlit(b);
link* pa = a->next;
link* pb = b->next;
int k = 0;
while (pa != NULL)
{
if (pa->ch != pb->ch)
{
k = 1;
break;
}
pa = pa->next;
pb = pb->next;
}
if (k == 1)
cout << "false";
else
cout << "true";
}