题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head * @return bool布尔型 */ bool isPail(ListNode* head) { // write code here if (head == nullptr) return false; if(head->next == nullptr) return true; int n = 0; ListNode* node = head; while (node) { n++; node = node->next; } n % 2 == 1 ? n = (n / 2 + 1) : n = n / 2; //拆成前后两段 node = head; ListNode* tmp = nullptr; while (--n) { node = node->next; } tmp = node->next; node->next=nullptr; //反转后半段 ListNode* p1 = nullptr; ListNode* p2 = tmp; ListNode* p3 = tmp->next; while (p3) { p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; //判断回文 p1 = head; while (p1 && p2 && p1->val == p2->val) { p1 = p1->next; p2 = p2->next; } if (!p1 || !p2) return true; else return false; } };