/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类 the head
* @return bool布尔型
*/
bool isPail(struct ListNode* head ) {
// write code here
typedef struct ListNode Node;
Node* fast=head;
Node* slow=head;
Node* next=NULL;
if(head==NULL||head->next==NULL){
return true;
}
while(fast&&fast->next){
fast=fast->next->next;
slow=slow->next;
}//使slow到达链表的中部
fast=slow->next;//fast达到中部靠后的节点
slow->next=NULL;//使后半边的链表独立出来
while(fast){
next=fast->next;
fast->next=slow;
slow=fast;
fast=next;
}//翻转后半边的链表
fast=head;//使fast回到链表的开头节点
while(slow&&fast){
if(slow->val!=fast->val){
return false;
}
fast=fast->next;
slow=slow->next;
}//检验是否为回文序列
return true;
}