验证回文串
题目:给定一个字符串,验证它是否是回文串。
例如:
“abccba” TRUE “abcddefa” FALSE
在这里我使用了两种方法来解决这个问题,第一种是单链表,第二种是用顺序表。
单链表
在用单链表解决这个问题的时候,由于要访问一个节点的前一个节点,随之而然的就想到了使用双向链表的方法,一个指向先驱节点,一个指向后继节点,这样访问就会十分方便。可是,使用单向链表来解决这个问题就会繁琐很多。基本上就把一个链表分成了两个链表,一个指针指向前面,从前往后遍历;一个指针指向尾部,也是从前往后遍历,但是尾部递减(往前移动)。
使用单链表实现,资源消耗是很大的。用了两重循环,时间复杂度是(n/2)*n,为O(n^2);空间复杂度为0。所以我觉得使用单链表来做不合适,用双向链表来做效率会提高很多。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ElemType char
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkList;
LinkList* Create()
{
LinkList *L;
LinkList *s;
ElemType e;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
printf("请输入字符串:");
while(1)
{
scanf("%c",&e);
if(e!='1')
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;
s->next=L->next;
L->next=s;
}
else