#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Lnode{
    struct Lnode* next;
    char data;
}Lnode,*ListLink;

//第一种方法
/*bool match(ListLink L,int n){
    char A[n/2];Lnode *p=L;
    for(int i=0;i<=(n-1)/2;i++){p=p->next;A[i]=p->data;}
    if(n%2==0){p=p->next;}
    for(int i=(n-1)/2;i>=0;i--){
        if(A[i]!=p->data){return false;}
        p=p->next;
    }
    return true;
} */ 

//第二种方法
bool match(ListLink L,int n){
    char A[n/2];
    Lnode* p=L->next;
    int i=0;
    for(i;i<n/2;i++){
        A[i]=p->data;
        p=p->next;
    }
    i--;
    if(n%2==1){p=p->next;}
    while(p!=NULL && p->data==A[i] ){p=p->next;i--;}
    if(i==-1){return true;}else{return false;}
}

void initList(ListLink &L){
    L=(Lnode *)malloc(sizeof(Lnode));
    L->next=NULL;
}

void add(ListLink &L,char data){
    Lnode *p=L;
    while(p->next != NULL){p=p->next;}
    Lnode *s=(Lnode*)malloc(sizeof(Lnode));
    s->data=data;
    p->next=s;
    s->next=NULL;
}

int main(){
    ListLink L;
    initList(L);
    add(L,'a');
    add(L,'b');
    add(L,'c');
    add(L,'a');
    if(match(L,4)){printf("true\n");}else{printf("false\n");}
    return 0;
}