Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法[通俗易懂]

Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法

大家好,又见面了,我是全栈君。

1. 问题描写叙述

  给定一个单链表,推断其内容是不是回文类型。

比如1–>2–>3–>2–>1。时间和空间复杂都尽量低。


2. 方法与思路

  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;
        stack<int> st;
    ListNode *tmp = head;
        while(tmp)
        {
            st.push(tmp->val);
            tmp = tmp->next;
        }

    while(head)
    {
        if(head->val != st.top() ) return false;
        head = head->next;
        st.pop();
    }
        return true;
    }
};

  2). 时间O(n)和空间O(1)解法
  既然用到了栈,能够想到递归的过程本身就是出入栈的过程,我们能够先递归訪问单链表,然后做比較。这样就省去了辅助空间,从而将空间复杂度降为O(1)。代码例如以下:
  

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
private:
    ListNode *lst;
public:
    bool judge(ListNode *head)
    {
        if(head == NULL) return true;

        if(judge(head->next) == false) return false;

        if(lst->val != head->val) return false;
        else{
            lst = lst->next;
            return true;
        }
    }
    bool isPalindrome(ListNode* head) {
        if(head == NULL || head->next == NULL) return true;
        lst = head;

        return judge(head);
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115288.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2022年N1叉车司机考试模拟100题及模拟考试

    2022年N1叉车司机考试模拟100题及模拟考试题库来源:安全生产模拟考试一点通公众号小程序2022N1叉车司机试题为N1叉车司机培训试题理论知识考试题库!2022年N1叉车司机考试模拟100题及模拟考试依据N1叉车司机考试教材。N1叉车司机全部考试题库随时根据安全生产模拟考试一点通上练习全部题库。1、【多选题】《中华人民共和国特种设备安全法》第八十四条规定,特种设备使用单位的特种设备存在严重事故隐患,无改造、修理价值,或者达到安全技术规范规定的其他报废条件,未依法履行报废义务,并办理使用登记证书注销手续的。责令停止使用有关特种设备,处()以

    2025年9月24日
    7
  • 查找历史市盈率

    查找历史市盈率https://www.zhihu.com/question/28424413

    2022年8月3日
    6
  • MySQL TENSE

    MySQL TENSE

    2021年5月5日
    137
  • M1卡/CUID卡格式化清卡操作方法

    M1卡/CUID卡格式化清卡操作方法CUID 卡是一种可以更改 0 扇区 0 块的特殊卡 很多朋友发现 CUID 卡写入一次之后再写就不让写了 认为卡已经废了 其实可以格式化清卡以后变空白卡 再次使用 普通 M1 卡也可以用该方法清卡 把卡片恢复成空白卡 一 把 CUID 卡放读写器上 打开 IC 卡操作软件 如下图二 把该卡的 dump 文件 拖进软件 或者用 读取 dump 文件 按钮打开卡文件 然后用默认的 keyA 密码清除卡片 点 清卡 按钮 如下图三 我们看到有部分扇区提示密码错误 这是控制位改变了 keyA 密码的操作权限 也就是说 keyA 没有清除卡片的

    2025年11月25日
    4
  • 微信公众号代理运营公司_多平台推广

    微信公众号代理运营公司_多平台推广最近公司项目需要切到微信服务号,但是公司内网环境需要开防火墙策略才能访问微信的开放API,实际上就是通过代理去访问。这里记录一下我通过代理去调用微信API遇到的坑及解决办法。

    2022年8月21日
    10
  • 如何将word转为html_word转html工具

    如何将word转为html_word转html工具推荐可以试用FreeSpire.DocforJava免费控件哦,它支持将htmlstring和htmlfile转word,代码操作简单,转换效果也很好。Htmlfile转wordimportcom.spire.doc.*;importcom.spire.doc.documents.XHTMLValidationType;publicclasshtmlFileToWord{pu…

    2022年10月12日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号