/**
* 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。

京公网安备 11010502036488号