Level:

​  Easy

题目描述:

Given a singly linked list, determine if it is a palindrome.

Example 1:

Input: 1->2
Output: false

Example 2:

Input: 1->2->2->1
Output: true

Follow up:

Could you do it in O(n) time and O(1) space?

思路分析:

​  由题意知,我们要判断一个链表是不是回文结构,并且时间复杂度为O(n),额外的空间复杂度为O(1)。那么我们只能在原地进行判断,我们可以将链表分成左右两部分,然后将右部分链表进行原地反转,反转完成后我们分别从最左端和最右段开始遍历链表,并且实时判断左右两部分链表对应的节点值是否相等,如果不等那就返回false,如果遍历能够走到最后,那么就返回true。这样可以在满足题目要求的情况下,求出问题的解。

代码:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null)
return true;
if(head.next==null)
return true;
ListNode n1=head;
ListNode n2=head;
//设置一个满指针和一个快指针,找到链表的中间节点,用来将链表化为左右两部分
while(n1.next!=null&&n1.next.next!=null){
n1=n1.next.next;
n2=n2.next;
}
n2=n1.next; //右部分
n1.next=null //左右断开
ListNode n3=null;
while(n2!=null){//反转右部分链表
n3=n2.next;
n2.next=n1;
n1=n2;
n2=n3;
}
n3=n1;//保存最右的节点,以便最后回复链表的结构
n2=head;
while(n1!=null&&n2!=null){//判断链表是否为回文结构
if(n1.val!=n2.val)
return false;
n1=n1.next;
n2=n2.next;
}
n1=n3.next;
n3.next=null;
while(n1!=null){//恢复链表结构
n2=n1.next;
n1.next=n3;
n3=n1;
n1=n2;
}
return true;
}
}

7.Palindrome Linked List(回文链表)的更多相关文章

  1. [CareerCup] 2.7 Palindrome Linked List 回文链表

    2.7 Implement a function to check if a linked list is a palindrome. LeetCode上的原题,参见我之前的博客Palindrome ...

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

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

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

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

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

  5. 234 Palindrome Linked List 回文链表

    请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 详见:https://leetcode.com/problems/palindrome-linked- ...

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

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

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

  8. LeetCode 234:回文链表 Palindrome Linked List

    ​ 请判断一个链表是否为回文链表. Given a singly linked list, determine if it is a palindrome. 示例 1: 输入: 1->2 输出: ...

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

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

  10. 回文链表 · Palindrome Linked List

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

随机推荐

  1. NodeJS之Url的使用

    一.通过http模块中的request事件可以得到在服务端拿到客户端的有关url的数据(req.url),其中req.url得到的数据是端口号后的所有路径,之后通过调入url模块对获取到的req.ur ...

  2. SqlServer——存储过程(未完工)

    http://www.cnblogs.com/blsong/archive/2009/11/30/1613534.html http://blog.csdn.net/lenotang/article/ ...

  3. UIView显示原理和过程

    一.UIView显示原理         一个控件,UIView之所以可以显示,是因为内部在UIView的内部有一个layer属性作为根图层,根图层上可以放其他子图层,在UIView中所有能够看到的内 ...

  4. eclipse自动生成带参数说明方法注释

    自动生成方法的注释格式,例如 /*** @param str* @return * @throws  ParseException*/ 快捷键是alt+shift+j,将光标放在方法名上,按快捷键.会 ...

  5. 玩转Jquery

    一 jquery简介 1 jquery是什么 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype ...

  6. IDEA创建的Maven项目中 解决编写pom.xml没有提示

    问题如下 没有提示信息 解决方案 把Repositories中的配置更新成本地仓库 问题解决

  7. dubbo-admin打包和zookper安装

    1 首选安装Zookper,下载zookeeper-3.5.3-beta版本,在这里我主要演示这个:下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/ ...

  8. solr :term 查询, phrase查询, boolean 查询

    搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...

  9. 【总结整理】display、visibility、overflow的隐藏问题

    display.visibility.overflow的隐藏问题 http://blog.sina.com.cn/s/blog_85e7c239010151r4.html   display:bloc ...

  10. Apollo——安装

    1.安装原版ubuntu 14.04http://www.ubuntu.org.cn/download/alternative-downloads 2.安装对应ubuntu 14.04的indigo版 ...