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

    问题描述:

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

    Example 1:

    Input: 1->2
    Output: false

    Example 2:

    Input: 1->2->2->1
    Output: true

    我的思路:

    现将链表里的值存储到一个vector中,然后在对vector从两边向中心对比,空间复杂度为O(n), 时间复杂度为O(n)

    代码:

    class Solution {
    public:
        bool isPalindrome(ListNode* head) {
            ListNode* p = head;
            vector<char> str;
            while(p){
                str.push_back(p->val);
                p = p->next;
            }
            int size = str.size();
            for(int i = 0; i < size/2;i++){
                if(str[i] != str[size-1-i])
                    return false;
            }
            return true;
        }
    };

     运行时间为21ms

    看了网上其他大神的解法,还可以用快慢指针来做。

    使用快慢指针让快指针跑到链表尾部,此时慢指针应该在中间部分,这个时候应该注意偶数个节点和奇数个节点的不同并对慢指针的位置进行调节,然后从栈内弹出元素与后半部分链表比较。

    class Solution {
    public:
        bool isPalindrome(ListNode* head) {
            if(!head || !head->next)
                return true;
            stack<int> stk;
            ListNode* slow = head;
            ListNode* fast = head;
            while(fast && fast->next){
                stk.push(slow->val);
                slow = slow->next;
                fast = fast->next->next;
            }
            if(fast && !fast->next)
                slow = slow->next;
            while(!stk.empty()){
                int a = stk.top();
                if(a != slow->val)
                    return false;
                slow = slow->next;
                stk.pop();
            }
            return true;
        }
    };

    运行时间为22ms

    follow up为要求空间复杂度为O(1)

    有的方法是找到中点后将后半段链表反转。

    但是也有人认为空间复杂度为1时不应该对输入进行改变,不过这道题的题目也没有详细说明。

    也有大神利用了递归的堆栈来实现一个自动的翻转:

    https://leetcode.com/problems/palindrome-linked-list/discuss/64490/My-easy-understand-C++-solution

    运行时间为23秒

  • 相关阅读:
    react条件渲染
    js用replaceAll全部替换的方法
    批量重命名图片,去除括号
    [转]自定义alert弹框,title不显示域名
    [转]ASCII码表及扩展ASCII码表,方便查阅
    [转]PHP中file_put_contents追加和换行
    Response
    Redirect
    Request
    Paginator
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9049128.html
Copyright © 2011-2022 走看看