题解 | 判断一个链表是否为回文结构
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
#include <optional> /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { ListNode* head = nullptr; bool ok{true}; std::optional<ListNode*> work(ListNode* node) { std::optional<ListNode*> compareNode = nullptr; if (node) { compareNode = work(node->next); } else { return head; } if (compareNode == std::nullopt) { return std::nullopt; } if (compareNode.value()->val != node->val) { ok = false; return std::nullopt; } return compareNode.value()->next; } public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head * @return bool布尔型 */ bool isPail(ListNode* head) { if (!head) { return true; } this->head = head; work(head); return ok; } };
核心思路,通过递归的回退,对单链表进行逆向遍历。