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年2月6日 下午3:00
下一篇 2022年2月6日 下午3:00


相关推荐

  • MFC中ASSERT_VALID fails with NULL pointer的个人解决办法[通俗易懂]

    MFC中ASSERT_VALID fails with NULL pointer的个人解决办法[通俗易懂]基于MFC在写一个利用GDAL和GDI+显示图像的系统,原有的Image::FromFile和Image::FromStream都用了一遍发现均会造成锁文件的情况,即使在程序用了delete的情况下,按道理FromStream应该不会锁但是我笨拙的编码依然是锁上了。。。索性换GDAL读图像然后用GDI+显示。在码代码中出现了如下的问题:VS2005调试输出显示:ASSERT_VALIDfai

    2025年9月16日
    8
  • Vue中 Vue.prototype 详解及使用

    Vue中 Vue.prototype 详解及使用我们可能会在很多组件里用到数据 实用工具 但是不想污染全局作用域 这种情况下 可以通过在原型上定义它们使其在每个 Vue 的实例中可用 1 基本示例在 main js 中添加一个变量到 Vue prototypeVue prototype appName MyApp 这样 appName 就在所有的 Vue 实例中可用了 甚至在实例被创建之前就可以 newVue beforeCreate function console log this appName

    2026年3月17日
    2
  • Gmap使用说明,通过输入经纬度查询位置

    Gmap使用说明,通过输入经纬度查询位置由于本人对于 Gmap 的使用时间不长 有很多东西不是太熟悉 所以本人的代码有借鉴的部分 如有发现侵权 还请及时联系本人 我目前已经基本实现了 地图的放大 缩小 平移的功能 完成了鼠标单击标点 输入经纬度标点 然后通过标志点连接成轨迹的功能 还可以保存正在使用的这块地图为图片 下面是本人的代码部分 注释已经很明确了 如有不明白的地方还请及时评论 Gmap 有个需要配置的部分详情可看 https

    2026年3月17日
    2
  • 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

    错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap最近在使用eclipse编写java程序时遇到这样一个问题:错误在类中找不到main方法,请将main方法定义为publicstaticvoidmain(String[]args)否则JavaFX应用程序类必须扩展javafx.application.Application看到这样的问题让我一头雾水,因为main方法已经写出解决这个问题可以点开eclipse-&amp;gt…

    2022年5月31日
    42
  • clover默认引导mac(clover win10引导)

    搞定Clover引导的Win&Mac双系统系统迁移至SSD作者:毛毛卷日期:2018-07-20字体大小:小中大从发完贴到现在总算搞定了,具体操作记录如下:由于当年折腾双系统的时候就经历了很多波折而且一般是默认启动MAC而我却是WIN10所以本身的要求和实现方法就有点特殊因此最终并没有偷懒用分区克隆的方法还是按部就班的进行首先把自己提的几个问题回答一下吧首先大概试了A…

    2022年4月11日
    41
  • 缅怀金庸 || 这些年你打过的金庸游戏

    缅怀金庸 || 这些年你打过的金庸游戏微信公众号 酷玩区块 飞雪连天射白鹿 笑书神侠倚碧鸳 这是金庸老先生小说作品首字母连起来 形成的一句朗朗上口的诗句 尽管我们还没有从 2018 年 10 月 25 日年仅 50 岁的李咏就因为癌症英年早逝命运无常的感叹中走出来 2018 年 10 月 30 日晚 18 55 分 据港媒报道 武侠小说泰斗作家查良镛 笔名金庸 逝世于香港养和医院 享年 94 岁 人们纷纷哀痛并发文悼念 金庸老先生生前的作品受到了几代

    2026年3月19日
    2

发表回复

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

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