/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
bool isPail(ListNode* head) {
// write code here
if (head == nullptr || head->next == nullptr)
return true;
ListNode *midFirst = midmid(head);
ListNode *rightHead = reverseList(midFirst);
ListNode *newHead = rightHead;
midFirst->next = nullptr;
// 开始比较
ListNode *leftHead = head;
while (leftHead != nullptr)
{
if (leftHead->val != rightHead-> val)
return false;
leftHead = leftHead->next;
rightHead = rightHead->next;
}
reverseList(newHead);
return true;
}
ListNode* midmid(ListNode* head){
ListNode *fast = head;
ListNode *slow = head;
while (fast->next != nullptr && fast->next->next != nullptr)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
ListNode* reverseList(ListNode* head){
ListNode *pre = head;
ListNode *cur = head->next;
while(cur != nullptr)
{
ListNode *temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
};