link: leetcode234 回文链表

方法1, 快慢指针,把前半部分存入栈中和后半部分比较

public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null) return true;
Stack<Integer> stack = new Stack<>();
ListNode slow = head;
ListNode fast = head;
while(true){
stack.push(slow.val);
slow = slow.next;
if(fast.next == null){//odd
stack.pop();
break;
}
if(fast.next.next == null){ //even
break;
}
fast = fast.next.next;
}
boolean flag = true;
while (!stack.empty() && slow != null){
int temp = stack.pop();
if(slow.val == temp){
slow = slow.next;
}else {
flag = false;
break;
}
}
if(!stack.empty() || slow != null)
flag = false; return flag;
}

方法2, 快慢指针,把前半部分反转与后半部分比较

public boolean isPalindrome2(ListNode head) { // O(1)
if(head == null || head.next == null) return true;
if(head.next.next == null){
if(head.next.val == head.val){
return true;
}else{
return false;
}
}
ListNode slow = head;
ListNode fast = head;
int cnt= 0;
while(true){
slow = slow.next;
cnt ++;
if(fast.next == null){//odd
cnt --;
break;
}
if(fast.next.next == null){ //even
break;
}
fast = fast.next.next;
}
// System.out.println("after while, slow.val =" +slow.val);
ListNode fan = head;
ListNode temp = head;
ListNode newHead = head;
int n = 0;
// System.out.println("cnt= " + cnt);
while (n < cnt - 1){
temp = fan.next;
fan.next = fan.next.next;
temp.next = newHead;
newHead = temp;
// System.out.println("temp =" +temp.val);
n++; }
fan.next = null; boolean f = true;
while(true){
// System.out.println(slow.val + " | " + newHead.val);
if(slow.val == newHead.val){
slow = slow.next;
newHead = newHead.next;
}else {
f = false;
break;
}
if(slow == null && newHead != null){
f = false;
break;
}else if(slow != null && newHead == null){
f = false;
break;
}else if(slow == null && newHead == null){
break;
}
}
return f;
}

leetcode234 回文链表 两种做法(stack(空间非O(1)),空间O(1))的更多相关文章

  1. [Swift]LeetCode234. 回文链表 | Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  2. LeetCode234 回文链表

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶:你能否用 O(n) 时间复杂 ...

  3. Longest Palindromic Substring (最长回文字符串)——两种方法还没看,仍需认真看看

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  4. leetcode206 反转链表 两种做法(循环,递归)

    反转链表 leetcode206 方法1 循环 public ListNode reverseList(ListNode head) { if (head == null || head.next = ...

  5. [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 ...

  6. 如何判断一个单向链表是否为回文链表(Palindrome Linked List)

    题目:给定一个单向链表,判断它是不是回文链表(即从前往后读和从后往前读是一样的).原题见下图,还要求了O(n)的时间复杂度O(1)的空间复杂度. 我的思考: 1,一看到这个题目,大脑马上想到的解决方案 ...

  7. [LeetCode] 234. Palindrome Linked List 回文链表

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  8. lintcode 中等题:Palindrome Linked List 回文链表

    题目 回文链表 设计一种方式检查一个链表是否为回文链表. 样例 1->2->1 就是一个回文链表. 挑战 O(n)的时间和O(1)的额外空间. 解题 法一: 再定义一个链表,存放链表反转的 ...

  9. 回文链表 · Palindrome Linked List

    [抄题]: 设计一种方式检查一个链表是否为回文链表.1->2->1 就是一个回文链表. [暴力解法]: 时间分析: 空间分析: [思维问题]: 以为要从从后往前扫描,不知道调用revers ...

随机推荐

  1. 关于导航自定义视图距离边界问题,点击状态栏TableView不能回滚到顶部问题

    一: 默认Navigation的自定义customView,设置为 Left or Right BarButtonItem 的时候会 与屏幕边界有个15像素的距离. 导致自定义视图的上的子视图响应区域 ...

  2. Java加载Class文件的原理机制

    详见:http://blog.sina.com.cn/s/blog_6cbfd2170100ljmp.html 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器 ...

  3. MySQL的简单条件判断语句

    在MySQL中条件判断语句常用于数据转换,基于现有数据创建新的数据列,使用场景还是比较多. 基础样式: CASE WHEN`条件`THEN`结果` ELSE`默认结果` END 在同一条判断语句中可以 ...

  4. JAVA中如何定义自定义注解

    了解注解 注解是Java1.5,JDK5.0引用的技术,与类,接口,枚举处于同一层次 .它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释 . 在Java中,自带 ...

  5. inittab - 与 sysv 兼容的 init 进程使用的初始化文件格式

    描述 inittab 文件描述在系统引导及通常的操作期间, 都启动哪些进程 (比如 /etc/init.d/boot, /etc/init.d/rc, getty 等等). Init(8) 讨论有关 ...

  6. MATLAB中的函数句柄及其应用

    1.函数句柄的创建 函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++), ...

  7. AIX中文件系统管理

    1.文件系统类型 AIX主要支持的文件系统有: JFS(Journaled  File  Systems)   日志型文件系统     JFS2(Enhanced  Journaled  File S ...

  8. Big Data(八)MapReduce的搭建和初步使用

    ---恢复内容开始--- 回顾: 1.最终开发MR的计算程序 2.hadoop 2.x 出现了一个yarn:资源管理>>MR没有后台场服务 yarn模型:container 容器,里面会运 ...

  9. 开发规范总结-java代码

    java8新特性: 开发的时候适当用一些新特性的语法,可以使代码更简洁.譬如List根据某个属性转map.stream.函数式编程.lambda表达式 有一种场景:两个list一个转map 两个lis ...

  10. [易学易懂系列|rustlang语言|零基础|快速入门|(10)|Vectors容器]

    [易学易懂系列|rustlang语言|零基础|快速入门|(10)] 有意思的基础知识 Vectors 我们之前知道array数组是定长,只可我保存相同类型的数据的数据类型. 如果,我们想用不定长的数组 ...