/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    ListNode * reverseList(ListNode *head) {
        if (!head || !head->next) {
            return head;
        }
        ListNode *nxt = head->next;
        ListNode *newhead = reverseList(nxt);
        nxt->next = head;
        head->next = nullptr;
        return newhead;
    }
    
    bool isPail2(ListNode *l1, ListNode *l2) {
        if (!l1) {
            return true;
        }
        return l1->val == l2->val ? isPail2(l1->next, l2->next): false;
    }

    bool isPail(ListNode* head) {
        if (!head || !head->next) {
            return true;
        }
        ListNode *bef = nullptr;
        ListNode *slow = head;
        ListNode *fast = head;
        while (fast && fast->next) {
            bef = slow;
            slow = slow->next;
            fast = fast->next->next;
        }
        bef->next = nullptr;
        slow = reverseList(slow);
        return isPail2(head, slow);
    }
};

思路:先反转后比较。

找到链表中点,将后面的链表翻转过来,然后判断两个链表是否相等。

链表节点个数可能为奇数,导致后面的链表节点个数多一个,所以判断条件改变一下:前面的链表为空即可返回true。