#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
char data;
LNode *next;
}LNode,*LinkList;
/*初始化单链表*/
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode)); //分配一个结点
if(L == NULL)
return false;
L->next = NULL;
return true;
}
/*链表插入(尾插)*/
bool ListInsert(LinkList &L, char x){
if(L == NULL)
return false;
LNode *p = (LNode *)malloc(sizeof(LNode));
if(p == NULL) //内存分配失败
return false;
p->data = x;
p->next = L->next;
L->next = p;
return true;
}
bool dc(LinkList &L, int n){
//L是带头结点的n个元素单链表,本算法判断链表是否是中心对称
int i;
char s[n/2]; //s字符栈
LNode *p = NULL;
p = L->next; //当前链表指针
for(i=0;i<n/2;i++){ //链表前一半元素进栈
s[i] = p->data;
p = p->next;
}
i--; //将当前下标位置指向栈顶
if(n%2 == 1) //若n是奇数,后移过中心结点
p = p->next;
while(p != NULL && p->data == s[i]){
p = p->next;
i--;
}
if(i == -1) //链表为空
{
printf("Yes\n");
return true; //链表中心对称
}
else
{
printf("No\n");
return false;
}
}
int main(){
LinkList L;
InitList(L);
ListInsert(L,'x');
ListInsert(L,'y');
ListInsert(L,'y');
ListInsert(L,'x');
dc(L,4);
return 0;
}
判断字符串的对称问题(栈的应用)
最新推荐文章于 2021-11-15 21:54:45 发布