LeetCode OJ:Palindrome Linked List(回文链表判断)
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
判断一个链表是否为回文链表,有很多方法都可以进行判断,可以先遍历链表然后将值全部存储到vector之中,也可以遍历链表然后将list中的值都压倒堆栈中再和List进行比较,
但是想要达到题目上面的 时间复杂度为O(n),而空间复杂度为O(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) {
ListNode * tmpHead = head;
stack<int> lt;
while (tmpHead){
lt.push(tmpHead->val);
tmpHead = tmpHead->next;
} while (!lt.empty()){
if (head->val != lt.top()) return false;
lt.pop();
head = head->next;
}
return true;
}
};
java版本的代码:
public class Solution {
public boolean isPalindrome(ListNode head) {
ListNode p = head;
Stack<ListNode> s = new Stack<ListNode>();
while (p != null) {
s.push(p);
p = p.next;
}
while(!s.isEmpty()){
if(head.val != s.pop().val)
return false;
head = head.next;
}
return true;
}
}
首先上面这个空间复杂度是不满足要求的,再者,既然想到了将元素压入栈中,那么结合递归的话,应该就能做到空间复杂度O(1)了,应为上面的方法用到了堆栈,与递归能很好的结合:
class Solution{
private:
ListNode * theHead; public:
bool isPalindrome(ListNode* head) {
theHead = head; //先将head保存到一个theHead里面,便于与后面的递归了得指针相比较。
return valid(head);
} bool valid(ListNode * first)
{
if (first == NULL) return true;
if (valid(first->next) == false) return false;
if (first->val == theHead->val){
theHead = theHead->next;
return true;
}
else
return false;
}
};
因为道理比较简单,所以就不一一赘述了。
java版本的代码如下所示:
public class Solution {
ListNode helper;
public boolean isPalindrome(ListNode head) {
helper = head;
return isValid(head);
} public boolean isValid(ListNode first){
if(first == null) return true;
if(isValid(first.next) == false) return false;
if(first.val == helper.val){
helper = helper.next;
return true;
}else
return false;
}
}
LeetCode OJ:Palindrome Linked List(回文链表判断)的更多相关文章
- [LeetCode] 234. Palindrome Linked List 回文链表
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- [CareerCup] 2.7 Palindrome Linked List 回文链表
2.7 Implement a function to check if a linked list is a palindrome. LeetCode上的原题,参见我之前的博客Palindrome ...
- [LeetCode] Palindrome Linked List 回文链表
Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time ...
- 234 Palindrome Linked List 回文链表
请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 详见:https://leetcode.com/problems/palindrome-linked- ...
- lintcode 中等题:Palindrome Linked List 回文链表
题目 回文链表 设计一种方式检查一个链表是否为回文链表. 样例 1->2->1 就是一个回文链表. 挑战 O(n)的时间和O(1)的额外空间. 解题 法一: 再定义一个链表,存放链表反转的 ...
- LeetCode OJ Palindrome Number(回文数)
class Solution { public: bool isPalindrome(int x) { ,init=x; ) return true; ) return false; ){ r=r*+ ...
- LeetCode 9 Palindrome Number(回文数字判断)
Long Time No See ! 题目链接https://leetcode.com/problems/palindrome-number/?tab=Description 首先确定该数字的 ...
- leetcode面试题 02.06. 回文链表,解题心路
目录 leetcode面试题 02.06. 回文链表,解题心路 1.题目描述 2.java语言题解一 3.java语言题解二 4.C语言题解一 leetcode面试题 02.06. 回文链表,解题心路 ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
随机推荐
- Angular学习笔记—HttpClient (转载)
HttpClientModule 应用 导入新的 HTTP Module import {HttpClientModule} from '@angular/common/http'; @NgModul ...
- 用仿ActionScript的语法来编写html5——第六篇,TextField与输入框
一,对比1,html5中首先看看在html5的canvas中的文字显示 var canvas = document.getElementById("myCanvas"); var ...
- WinForm TCP异步连接之服务器端
C# — WinForm TCP连接之服务器端 TCP连接之服务器端,涉及到如下三个函数,分别是: /***************************** ** 函数功能: 服务端监听 ** 输 ...
- python全栈开发之OS模块的总结
OS模块 1. os.name() 获取当前的系统 2.os.getcwd #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...
- LeetCode:组合总数III【216】
LeetCode:组合总数III[216] 题目描述 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. ...
- php内存管理机制、垃圾回收机制
一.内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存 $a = ...
- win7解压的软件开机自启动
win7让你一个可执行程序开机启动. 运行-->regedit-->HKEY_LOCAL_MACHINE-->SOFTWARE-->Microsoft-->Windows ...
- ES6 Promise 让异步函数顺序执行
应用 ES6 的 内置对象 Promise, 让异步函数 按顺序执行的例子 如下: 上边 是四个用Promise 处理过的 异步执行的函数: fn1.fn2.fn3.fn4 下面,让其按顺序执行 如下 ...
- 通过自动回复机器人学Mybatis:搭建核心架构
imooc视频学习笔记 ----> URL:http://www.imooc.com/learn/154 MessageDao.java package com.imooc.dao; impor ...
- CF961G Partitions(第二类斯特林数)
题目 CF961G 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 相信大家能得出一个一眼式:\[Ans=\sum\limits_{i=1}^n w_i\sum\limi ...