leetcode系列(77)Palindrome Linked List

来源:互联网 发布:雅思7分有多难 知乎 编辑:程序博客网 时间:2024/06/03 01:42

Given a singly linked list, determine if itis a palindrome.

解答:快慢指针split链表,需要处理链表长度为奇数(fast肯定是在最后一个节点停止)和长度为偶数(fast指针肯定是在nullptr停止)两种情况;然后reverse and compare。

class Solution {public:    bool isPalindrome(ListNode* head) {        if (head == nullptr || head->next == nullptr) {            return true;        }        // split the list        ListNode* slow = head;        ListNode* fast = head;        while (fast != nullptr && fast->next != nullptr) {            slow = slow->next;            fast = fast->next->next;        }        ListNode* ptr = (fast == nullptr ? slow : slow->next);        // reverse another half        ListNode* pre = nullptr;        auto cur = ptr;        while (cur != nullptr) {            auto post = cur->next;            cur->next = pre;            pre = cur;            cur = post;        }        ptr = pre;        // compare two half list        for (ptr = pre ; ptr != nullptr; ptr = ptr->next, head = head->next) {            if (ptr->val != head->val) {                return false;            }        }        return true;    }};


0 0
原创粉丝点击