[LC]234题 Linked List Cycle (回文链表)(链表)
①中文题目
请判断一个链表是否为回文链表。
示例 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、回文链表是什么?
上海自来水来自海上
黄山落叶松叶落山黄。这个例子摘自网上别人的回答。
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 (回文链表)(链表)的更多相关文章
- 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 ...
- LeetCode 234 Palindrome Linked List(回文链表)(*)(?)
翻译 给定一个单链表,确定它是否是回文的. 跟进: 你能够在O(n)时间和O(1)空间下完毕它吗? 原文 Given a singly linked list, determine if it is ...
- [LC]141题 Linked List Cycle (环形链表)(链表)
①中文题目 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 ...
- [LeetCode]234. Palindrome Linked List判断回文链表
重点是: 1.快慢指针找到链表的中点.快指针一次走两步,慢指针一次走一步,分清奇偶数情况. 2.反转链表.pre代表已经反转好的,每次将当前节点指向pre /* 快慢指针得到链表中间,然后用206题方 ...
- LeetCode 第五题 最长的回文字符串 (JAVA)
Longest Palindromic Substring 简介:字符串中最长的回文字符串 回文字符串:中心对称的字符串 ,如 mom,noon 问题详解: 给定一个字符串s,寻找字符串中最长的回文字 ...
- 【LeetCode每天一题】Palindrome Number( 回文数字)
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...
- 【做题】BZOJ2342 双倍回文——马拉车&并查集
题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...
- 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 ...
- LeetCode随缘刷题之最长回文子串
这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...
随机推荐
- 前端知识点总结——jQuery(上)
1.什么是jQuery jQuery: 第三方的极简化的DOM操作的函数库第三方: 下载极简化: 是DOM操作的终极简化: 1. DOM: 增删改查2. 事件绑定:3. 动画效果:4. Ajax DO ...
- [HDU2294] Pendant - 矩阵加速递推
Pendant Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 22.Linux定时任务
1.计划任务时间管理 参数 含义 -e 编辑定时任务 -l 查看定时任务 -r 删除定时任务 -u 指定其他用户 \* 表示任意的(分.时.日.月.周)时间都执行 \- 表示一个时间范围段, 如5-7 ...
- hadoop2.x的安装
可以自己从官网编译打包也可以直接下载官网的.gz包.自己编译打包的过程如下: .查看是否安装cmake.svn.openssl.ncurses,没有的直接安装上 yum list|grep cmake ...
- amoeba-mysql
配置完成后无法连接 Could not create a validated object, cause: ValidateObject failed 查看logs/下面的 messageHandle ...
- 高性能封装检测浏览器支持css3属性函数
css3出来已经很久了,现在来谈判断浏览器是否支持某个css3的属性虽说有点过时了,但是还是可以谈谈的,然后,此篇主要谈的不是判断是否支持,而是怎么封装更好,为什么这么封装,欢迎吐槽. 入题,判断浏览 ...
- zookeeper - 通过java代码连接zookeeper(2)
首先创建一个Maven项目 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- Apache 4.x HttpClient
public static Map callRequest(String requestUrl, Method method, Map<String, String> data) thro ...
- The value for the useBean class attribute is invalied
JSP: The value for the useBean class attribute XXX is ...
- httprunner-2-linux下搭建hrun(下)
前言 前面我们说了linux下安装python3,hrun是需要依赖数据库,我们用docker进行安装mysql5.7让数据库能正常连接.安装mysql5.7请参考:https://www.cnblo ...