/** * 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; }