[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; /** * 给你 ...
随机推荐
- 代码审计-thinkphp3.2.3框架漏洞sql注入
开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...
- 收益 or 挑战?Serverless 究竟给前端带来了什么
作者 | 黄子毅(紫益) 阿里前端技术专家 导读:前端开发者是最早享受到 "Serverless" 好处的群体,因为浏览器就是一个开箱即用.甚至无需为计算付费的环境!Serverl ...
- python-json与字典的区别
1.字典的类型是字典dict,是一种数据结构:json的类型是字符串str,json是一种格式: 接口测试是传参数payload时有时候是传的字符串,应该将payload的类型改为json 这点要注 ...
- 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群
首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...
- 微信公众号【阿里技术(ali_tech)】历史文章整理
简介 来自微信公众号: ali_tech 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此. 本内容来自微信公众号的分享,最后更新时间2019-10-26,请关注对应公众号接收最新分享,定期同步地址: ...
- .NET Core System.Drawing.Common 中文乱码的坑
最近在写一个汉字取点阵的程序,最开始是在win环境下运行的,没发现什么异常,然后今天把程序放在centos 下后发现英文正常,中文完全变成两位的字了,最开始是字体的原因 在把宋体等安装到centos ...
- day21作业
1.定义MySQL类 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和po ...
- 周总结 + for 循环 + 内置方法(day06整理)
目录 周总结 一 计算机基础之编程 (一) 什么是编程语言 (二) 什么是编程 (三) 为什么编程 二 计算机五大组成 (一) CPU (1) 运算器 (2) 控制器 (二) 存储器 (1) 主存 ( ...
- 一个漂亮的js表单验证页面+验证码
一个漂亮的js表单验证页面 见图知其意, 主要特性 带密码安全系数的判断 其他的就没有啥啦 嘿嘿嘿 当然,其代码也在Github上 我也准备了一套可以直接Ctrl + v; Ctrl + c 运行的代 ...
- 在k8s上安装Jenkins及常见问题
持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...