算法设计:
设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型,试设计算法判断该链表的全部n个字符是否中心对称。
算法思想:
使用栈来判断链表中的数据是否中心对称。判断n为奇数或偶数,若n为奇数,则有一个中心结点为n%2+1,让链表的前n%2个元素依次进栈,在处理链表的后面元素时,先跳过中心结点,(若n为偶数,则不用直接从n%2+1个元素开始)访问一个链表元素,就从栈中弹出一个元素,两个元素比较,若相等,则将链表中的下一个元素于栈中再弹出的元素比较。直到链表到尾。这时若站是空栈,则得出链表中心对称;否则,当链表中的一个元素于栈中弹出元素不等时,为非对称。
bool d(LinkList L,int n){
//L是带头结点的n个元素单链表。
int i;
char a[n/2];
p = L->next;//p是链表的工作指针,指向待处理的当前元素
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 && s[i] == p->data){
i--;
p = p->next;
}
if(i == -1){//栈为空
return true;//链表中心对称
}else{
return false;//链表不中心对称
}
}