/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param head ListNode类 the head
 * @return bool布尔型
 */
bool isPail(struct ListNode* head ) {
    // write code here
    struct ListNode *start = head;
    struct ListNode *end = head;
    int cnt = 0, cnt1 = 0;
    if(head == NULL)
        return false;
    if(head->next == NULL)
        return true;
    while(end != NULL)
    {
        //printf("end->val=%d cnt=%d\n", end->val, cnt);
        cnt++;
        end = end->next;
   }
    printf("cnt=%d\n", cnt);
    end = head;
    while(cnt1 < cnt/2)
    {
        printf("end->val=%d cnt1=%d\n", end->val, cnt1);
        cnt1++;
        end = end->next;
    }
    printf("end->val=%d cnt1=%d\n", end->val, cnt1);
    if(cnt%2 != 0)
        end = end->next;
    printf("end->val=%d\n", end->val);
    struct ListNode* head2 = NULL;
    while(end != NULL)
    {
        struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));
        p->val = end->val;
        p->next = head2;
        head2 = p;
        end = end->next;
    }
    while(start != NULL && head2 != NULL)
    {
        if(start->val != head2->val)
            return false;
        start = start->next;
        head2 = head2->next;
    }
    return true;
}