①中文题目

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false
示例 2:

输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

②思路

首先,找到链表的中间结点在哪,用j标记,此处用到leetcode的876题,也就是我上一篇博文里那个题。从而把链表分为前半截和后半截。

然后,把后半截链表反转一下,记为x,如果x和前半截链表长得一模一样,那就返回true,不一样就返回false。

③代码

 class Solution {
public boolean isPalindrome(ListNode head) {
ListNode temp1=head;
ListNode temp2=head;
int i=1;
int k=0;
boolean flag=false;
while(head==null||head.next==null)
return true; //链表长度为0或者1,要单独拿出来说 while(temp1.next!=null){
i+=1;
temp1=temp1.next;
}
for(int j=0;j<i/2;j++){ //i就是链表的一半处
temp2=temp2.next; //找到中间结点
} //至此,temp2就是后半截链表的头结点
ListNode pre=null;
ListNode curr; //curr是后半截链表的起点。
if(i%2==0) //根据链表长度为奇数还是偶数,来决定后半截链表的起点。
curr=temp2;
else
curr=temp2.next;
ListNode buf=null; //buff就是个缓存而已,有点像206题里的temp
while(curr!=null){
buf=curr.next;
curr.next=pre;
pre=curr;
curr=buf; //整个反转过程,时间复杂度是O(N),空间复杂度是O(1)
} //至此,后半截链表已经被反转 //head保存的是前半截链表的头结点,pre是后半截链表反转之后的头结点
while(pre!=null){ //不能用head.next!=null去判断,因为前半截的最后一个结点的后边不是null。
if(head.val==pre.val){
head=head.next;
pre=pre.next;
k+=1;
}
else{
return false; //一旦发现元素不等的现象,立刻返回false
}
}
if(k==i/2)
flag=true; //用k来作为flag翻不翻转的标志
return flag; }
}

④运行结果

执行结果:通过

显示详情
执行用时 :1 ms, 在所有 Java 提交中击败了99.89%的用户
内存消耗 :40.4 MB, 在所有 Java 提交中击败了97.88%的用户

⑤学到的东西

1、回文链表是什么?

上海自来水来自海上

黄山落叶松叶落山黄。这个例子摘自网上别人的回答。

2、回文链表里,如果链表长度为0,1个,都要单独拿出来讨论。

3、链表长度为奇数和偶数时,后半截链表的起点是不一样的。

比如链表长度为5,比如[1,2,3,2,1],那么如果后半截链表起点应该是[3,2,1]中的2,而不是3。

比如链表长度为6,比如[1,2,3,3,2,1],那么如果后半截链表起点应该是[3,2,1]中的3。

4、本题就是206题和876题的结合,我把两个程序并在一起写的。我看到网上有的人是把两个程序写在两个函数里的,再进行调用的。

比如把206题程序装在reverseListNode函数里,把876题装在getMidListNode函数里,再在主程序里调用(不是main函数,就是普通函数之间的调用)。

[LC]234题 Linked List Cycle (回文链表)(链表)的更多相关文章

  1. LeetCode 234. Palindrome Linked List (回文链表)

    Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...

  2. LeetCode 234 Palindrome Linked List(回文链表)(*)(?)

    翻译 给定一个单链表,确定它是否是回文的. 跟进: 你能够在O(n)时间和O(1)空间下完毕它吗? 原文 Given a singly linked list, determine if it is ...

  3. [LC]141题 Linked List Cycle (环形链表)(链表)

    ①中文题目 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 ...

  4. [LeetCode]234. Palindrome Linked List判断回文链表

    重点是: 1.快慢指针找到链表的中点.快指针一次走两步,慢指针一次走一步,分清奇偶数情况. 2.反转链表.pre代表已经反转好的,每次将当前节点指向pre /* 快慢指针得到链表中间,然后用206题方 ...

  5. LeetCode 第五题 最长的回文字符串 (JAVA)

    Longest Palindromic Substring 简介:字符串中最长的回文字符串 回文字符串:中心对称的字符串 ,如 mom,noon 问题详解: 给定一个字符串s,寻找字符串中最长的回文字 ...

  6. 【LeetCode每天一题】Palindrome Number( 回文数字)

    Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...

  7. 【做题】BZOJ2342 双倍回文——马拉车&并查集

    题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...

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

  9. LeetCode随缘刷题之最长回文子串

    这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...

随机推荐

  1. Redis 哨兵机制以及灾难演练

    #### 哨兵都采用这个配置即可 ##### 1.修改sentinel.conf配置文件 ![image](https://img2018.cnblogs.com/blog/1334966/20191 ...

  2. [NOIp2012] luogu P1083 借教室

    该*的英语,这么长还要背. 题目描述 你有 nnn 个数 ai{a_i}ai​,mmm 次操作,每次操作将 [l,r][l,r][l,r] 区间的每个数减去 ccc.要求任何时刻 ∀x∈[1,n]\f ...

  3. (21)ASP.NET Core EF创建模型(关系)

    1.关系 关系定义两个实体之间的关系.在关系型数据库中,这由外键约束表示. 2.术语定义 有许多术语用于描述关系:●相关实体:这是包含外键属性的实体.有时称为关系的"子级".●主体 ...

  4. Mongoose-modified-at 时间自动记录插件介绍

    Mongoose-modified-at 是一款自动更新字段变化时间并记录到数据库中的 Mongoose 插件,类似 Mongoose 自带的 timestamps 功能. 使用场景 让我们考虑一个场 ...

  5. 微信公众号 访问403问题,样式错乱,js失效

    我服了,还是那个微信公众号小项目. 这个项目用的是ssm+velocity 问题的是,有时候页面加载会乱,js,css都加载不出来. 这个问题也是很久了,前几天开会,那个甲方医院很不开心,说是要找下家 ...

  6. Spring(五)Spring缓存机制与Redis的结合

    一.Redis和数据库的结合 使用Redis可以优化性能,但是存在Redis的数据和数据库同步的问题. 例如,T1时刻以将 key1 保存数据到 Redis,T2时刻刷新进入数据库,但是T3时刻发生了 ...

  7. unity单例封装

    # 1.前言本篇主要针对Unity单例模式,完成一个可以重复继承使用的抽象类,减少重复的工作与代码.同时,对存在的多种单例进行优劣分析.# 2.Unity单例问题分析## 2.1 单例原则单例要满足以 ...

  8. TensorFlow Object Detection API中的Faster R-CNN /SSD模型参数调整

    关于TensorFlow Object Detection API配置,可以参考之前的文章https://becominghuman.ai/tensorflow-object-detection-ap ...

  9. Airy Memory 内存清理 + 注册码

    链接: https://pan.baidu.com/s/1ZGxDtJBMhrRtBISvL1Lv0w 提取码: ccjs

  10. 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】

    2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...