链接: https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking
//1.快慢指针法 找中点 + 后半部分 逆置法
struct ListNode* reverseList(struct ListNode* head)
{
if(head==NULL)
return NULL;
struct ListNode* pre=NULL;
struct ListNode* cur=head;
struct ListNode* next=cur->next;
while(cur)
{
cur->next=pre;
pre=cur;
cur=next;
if(next!=NULL)
next=next->next;
}
return pre;
}
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode* low,*fast;
low =head;
fast=head;
while(fast!=NULL&&fast->next!=NULL)
{
low=low->next;
fast=fast->next->next;
}
return low;
}
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
ListNode* mid=middleNode(A);
ListNode* rhead=reverseList(mid);
ListNode* rtail=rhead;
ListNode* cur=A;
while(rtail)
{
if(cur->val!=rtail->val)
{
return false;
}
cur=cur->next;
rtail=rtail->next;
}
return true;
// write code here
}
};