码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode234. Palindrome Linked List

时间:2018-05-17 11:50:26      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:ret   位置   bsp   复杂度   lan   class   stand   false   isp   

问题描述:

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秒

 

LeetCode234. Palindrome Linked List

标签:ret   位置   bsp   复杂度   lan   class   stand   false   isp   

原文地址:https://www.cnblogs.com/yaoyudadudu/p/9049128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!