zoukankan      html  css  js  c++  java
  • 234. Palindrome Linked List

    Problem statement

    Given a singly linked list, determine if it is a palindrome.

    Follow up: Could you do it in O(n) time and O(1) space?

    Solution

    This is very typical link list problem since it includes two basic and important operations for link list: find middle and reverse the link list.

    Generally, we can solve it through three main steps:

    • Find the middle of the link list
    • Reverse the link list from the next of middle
    • Compare head and middle to test if the given link list is a palindrome

    Time complexity is O(n), space complexity is O(1).

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        bool isPalindrome(ListNode* head) {
            if(head == NULL || head->next == NULL){
                return true;
            }
            ListNode* mid = find_mid(head);
            mid->next = reverse(mid->next);
            ListNode* start = mid->next;
            mid->next = NULL;
            while(head && start){
                if(head->val != start->val){
                    return false;
                }
                head = head->next;
                start = start->next;
            }
            return true;
        }
    private:
        ListNode* find_mid(ListNode* head){
            ListNode* fast = head->next;
            ListNode* slow = head;
            while(fast != NULL && fast->next != NULL){
                fast = fast->next->next;
                slow = slow->next;
            }
            return slow;
        }
    private:
        ListNode* reverse(ListNode* head){
            ListNode* prev = NULL;
            ListNode* next = NULL;
            while(head){
                next = head->next;
                head->next = prev;
                prev = head;
                head = next;
            }
            return prev;
        }
    };
  • 相关阅读:
    Köln-keith jarrett
    关于写博客,看博客
    django中使用celery
    django邮箱验证模块
    django验证码模块使用
    auth模块
    djangoORM语句
    django的from组件
    django分页
    django基本数据类型
  • 原文地址:https://www.cnblogs.com/wdw828/p/7016620.html
Copyright © 2011-2022 走看看