题目描述:
设一个单链表的表头指针为L,结点结构由data和next两个域组成,其中data域均是字符型,请设计一个算法判断该链表的全部n个字符是否中心对称。例如xyx、xyyx这样的即为中心对称。
算法思路:
可以将该单链表的前一半元素先入栈,然后访问后半部分元素,当访问后半部分元素的第一个元素时,在栈中弹出一个元素进行比较,若相等,则将链表的下一个元素和下一个被弹出的元素进行比较,直到链表尾,此时若栈是空栈,则该链表中心对称。
代码如下:
int dc(LinkList L,int n){
int i;
char s[n/2]; //s字符栈
p=L->next; //p是链表的工作指针,指向待处理的当前元素
for(i=0;i<n/2;i++){ //链表的前一半元素进栈
s[i]=p->data;
p=p->next;
}
i--; //恢复最后的i值
if(n%2==1) p=p->next; //若n是奇数,后移过中心结点
while(p!=NULL && s[i]==p->data){ //检测是否中心对称
i--;
p=p->next;
}
if(i==-1) return 1;
else return 0;
}