博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
阅读量:6994 次
发布时间:2019-06-27

本文共 1465 字,大约阅读时间需要 4 分钟。

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
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);    }};

转载地址:http://elbvl.baihongyu.com/

你可能感兴趣的文章
浅谈C#中的结构
查看>>
使用单元素枚举实现单例
查看>>
前端基本知识
查看>>
将excel中的数据转为json格式
查看>>
字典操作
查看>>
使用source创建一个新项目(将本地项目文件和github远程库链接)
查看>>
运行问题,如何修改APACHE的监听端口和密码
查看>>
Solaris服务管理
查看>>
Linux process state codes
查看>>
SQL Server 2014中的新存储引擎---聚合columnstore索引,
查看>>
Asp.net中的ajax回调模式(ICallbackEventHandler)
查看>>
函数多文件管理
查看>>
51nod 1554 欧姆诺姆和项链 MP+分情况讨论
查看>>
对其他各团队的评价
查看>>
记第一份工作
查看>>
二项分布的方差
查看>>
区块链公链,私链漫谈
查看>>
linux基本命令
查看>>
解决windows 10 9926 中vmware安装的虚拟机无法桥接上网的问题
查看>>
初学 Python(十四)——生成器
查看>>