* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
ListNode* reverse(ListNode* pHead){
if(!pHead)
return NULL;
ListNode* l=pHead;
ListNode* r=pHead->next;
l->next=NULL;
while(r){
pHead=r->next;
r->next=l;
l=r;
r=pHead;
}
return l;
}
bool isPail(ListNode* head) {
// write code here
if(!head||!head->next)
return true;
ListNode *left,*mid,*right;
left=head;
mid=head->next;
right=head->next->next;
while(right&&right->next){
left=left->next;
mid=mid->next;
right=right->next->next;
}
// return false;
if(right){
left->next=NULL;
ListNode* cur;
cur=reverse(mid->next);
while(head){
if(head->val!=cur->val)
return false;
head=head->next;
cur=cur->next;
}
}
else {
left->next=NULL;
mid=reverse(mid);
while(head){
if(head->val!=mid->val)
return false;
head=head->next;
mid=mid->next;
}
}
return true;
}
};