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

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true 思路:

1.通过快慢指针,来遍历链表,当快指针走到末尾时,慢指针即指向链表中点
2.将后半段反转
3.将后半段与前半段进行对比,如果data相同,则继续遍历,直至到达末尾,return ture, 如果中间匹配不相同,return false 代码实现:

简单定义一个节点类型:
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}

判断是否为回文链表的API

    /**
* 判断链表是否为回文链表
*
* @param head
* @return
*/
public static boolean isPalindrome(ListNode head) {
//如果链表只有一个有效节点或者没有有效节点,return true
if (head == null || head.next == null) {
return true;
}
ListNode quick = head;
ListNode slow = head;
//快慢指针,快指针一次走两步,慢指针一次走一步
while (quick != null && quick.next != null) {
quick = quick.next.next;
slow = slow.next;
}
//从slow开始反转后半段链表
ListNode pre = null;
ListNode p = slow;
while (p != null) {
ListNode temp = p.next;
p.next = pre;
pre = p;
p = temp;
}
//对比前半段和后半段的data值是否相同
while (pre != null) {
if (pre.val == head.val) {
pre = pre.next;
head = head.next;
} else {
return false;
}
}
//返回true
return true;
}

测试:

    public static void main(String[] args) {
//测试
ListNode head = new ListNode(1);
ListNode p2 = new ListNode(2);
ListNode p3 = new ListNode(2);
ListNode p4 = new ListNode(1);
head.next = p2;
p2.next = p3;
p3.next = p4;
System.out.println(isPalindrome(head));
}

结果:

true

Java判断链表是否为回文链表的更多相关文章

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

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

  2. Java - 判断字符串是否是回文

    首先,回文是指类似于“12345”,“abcdcba”的形式,即正念和反念都是一样的字符串 判断字符串是否是回文,这边介绍3种办法 将字符串翻转,判断翻转后的字符串和原字符串是否相等 public s ...

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

  4. Java实现 LeetCode 234 回文链表

    234. 回文链表 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否 ...

  5. [LC]234题 Linked List Cycle (回文链表)(链表)

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

  6. 领扣(LeetCode)回文链表 个人题解

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

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

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

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

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

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

随机推荐

  1. Nginx基础优化

    Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...

  2. Oracle 五笔码函数

    五笔码 select comm.fun_spellcode_wb('数据库') from dual 结果:ORY 函数 CREATE OR REPLACE FUNCTION COMM.FUN_SPEL ...

  3. [转载]Ubuntu Server下配置UTF-8中文环境

    转载自:http://www.gaojinbo.com/ubuntu-server%E4%B8%8B%E9%85%8D%E7%BD%AEutf-8%E4%B8%AD%E6%96%87%E7%8E%AF ...

  4. eclipse Tomcat8.0端口占用报错和发布路径修改

    实际上我是eclipse莫名其妙调试时崩了,结果再启动也无法启动tomcat报端口占用错 修改server.xml里的端口号不是好方法,改完运行报   “ 对不起! 这里不是Web服务器” 后来研究发 ...

  5. nodejs express的基本用法

    demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...

  6. vue-cli 3.0版本,配置代理Proxy,不同环境不同target(生产环境,uat环境和本地环境的配置)

    1.在项目的的根目录下新建vue.config.js 2.新建一个config包,里面存放不同的环境文件,里面包含:pro.env.js(生产环境配置),uat.env.js(测试环境配置),dev. ...

  7. sql 条件查询

    使用SELECT * FROM <表名>可以查询到一张表的所有记录.但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录. ...

  8. 【LeetCode 13】罗马数字转整数

    题目链接 [题解] 就是上一题反过来的过程. 因为有说一般情况下后面的罗马数字是小于前面的罗马数字的. 如果前面的罗马数字小于后面的罗马数字了. 说明出现了4,9,40,90这些特殊情况. 那么就得判 ...

  9. SP6779 GSS7 - Can you answer these queries VII

    纯数据结构题,没有思维难度.直接用线段树求最大子段和的方法完成树上路径的合并.注意链上合并顺序要符合序列的前后顺序. #include <cstdio> #include <cstr ...

  10. ES6 教程

    上次分享了es6开发环境的搭建,本次接着分享es6常用的特性. es6常用的语法参考   :    https://blog.csdn.net/itzhongzi/article/details/73 ...