- 找到链表的中间节点
- 将以中间节点作为链表的首节点进行反转
- 比较两个链表是否相等(如果是奇数,cur2比cur1多一个节点,此时注意玄幻条件以cur1为准即可)
class Solution
{
public:
ListNode* reverseList(ListNode* head)
{
ListNode* temp;
ListNode* cur = head;
ListNode* pre = nullptr;
while(cur)
{
temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
bool isPalindrome(ListNode* head)
{
if(head == nullptr || head->next == nullptr)
{
return true;
}
ListNode* pre = head;
ListNode* slow = head;
ListNode* fast = head;
while(fast && fast->next)
{
pre = slow;
slow = slow->next;
fast = fast->next->next;
}
pre->next = nullptr;
ListNode* cur1 = head;
ListNode* cur2 = reverseList(slow);
while(cur1)
{
if(cur1->val != cur2->val)
{
return false;
}
cur1 = cur1->next;
cur2 = cur2->next;
}
return true;
}
};```