思路三步走:
第一步:找中间结点
第二步:反转后半段链表
第三步:判断是否回文
//核心代码段
bool isPalindrome(struct ListNode* head){
struct ListNode* mid = head;
struct ListNode* end = head;
struct ListNode* next = NULL;
struct ListNode* rhead = NULL;
if(head == NULL)
{
return false;
}
// 找中间结点
while(end && end->next)
{
mid = mid->next;
end = end->next->next;
}
//逆序后半部分链表
while(mid)
{
next = mid->next;
mid->next = rhead;
rhead = mid;
mid = next;
}
//判断是否回文
while(head && rhead)
{
if(head->val != rhead->val)
{
return false;
}
head = head->next;
rhead = rhead->next;
}
return true;
}