题目描述
题目分析
本题的目标是判断以中心为轴,左右两端是否对称。栈具有后进先出的特性,因此可先遍历前半部分存储至栈中,再遍历后半部分,同时,依次让栈中的元素出栈,来判断比较是否相等。若全相等则为对称,若过程中有不相等时,则为部队称。
关键便是先找到中心点,但有奇数个数序列和偶数个数序列这两种情况,需要分情况讨论。
代码实现
int dc(LinkList L, int n){
// L带有头结点
if(L->next == NULL || L->next->next == NULL) return 0;
int i;
vector<char> s(n/2); // 向下取整
for(i = 0; i < n/2; i++){
L = L->next;
s[i] = L->data;
}
//若n为奇数时,将L指向中点的下一个结点
if(n % 2 == 1) L = L->next->next;
// 因为在上面for循环中i多加了一个1,因此先减去1
while(L != NULL && s[--i] == L->data) L = L->next;
if(i == 0) return 1;
else return 0;
}