题目:给定一个链表的头节点head,请判断该链表是否为回文结构。

如:1 2 1 返回true

1 2 2 1 返回true

1 2 3 返回false

思路一:

利用栈,从左到右遍历链表,然后将每一个节点压入栈中。最后比较栈顶到栈底的顺序是否和链表原先的顺序一致。

代码实现:

    //判断一个链表是否为回文结构  1-2-2-1public static boolean isPalindrome(Node head) {Stack<Node> stack = new Stack<>();Node cur = head;//遍历链表while (cur != null) {stack.push(cur);cur = cur.next;}//比较栈顶到栈底的元素是否和链表顺序一样while (!stack.isEmpty()) {if (head.value != stack.pop().value) {return false;}head = head.next;}return true;}

测试代码:

    public static void main(String[] args) {Node head = new Node(1);Node node1 = new Node(2);Node node2= new Node(2);Node node3 = new Node(1);head.next = node1;node1.next = node2;node2.next = node3;System.out.println(isPalindrome(head));

测试结果:

思路二:

只将链表的右半部分压入栈中,然后比较栈顶到栈底是否和左半部分一致。

例如 1 2 3 3 2 1

右半部分入栈,栈顶到栈底是 1 2 3,与左半部分一致的话,即有回文结构,关键是怎么找到右半部分的第一个节点。利用快慢指针,慢指针每次走一步,快指针每次走两步。

代码实现:

    //1 2 3 3 2 1 ,让右半部分 3 2 1分别入栈public static boolean isPalindrome2(Node head) {Stack<Node> stack = new Stack<>();//使用快慢指针Node slow = head;Node fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}//此时slow指针指的就是链表右半部分的第一个节点while (slow != null) {stack.push(slow);slow = slow.next;}//比较栈顶到栈底元素是否和链表左半部分相等while (!stack.isEmpty()) {if (head.value != stack.pop().value) {return false;}head = head.next;}return true;}

判断一个链表是否为回文结构【Java实现】相关推荐

  1. 判断一个链表是否为回文结构-Java:解法三

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net package live.every.day.Pro ...

  2. 算法练习day9——190327(“之” 字形打印矩阵、在行列都排好序的矩阵中找数、打印两个有序链表的公共部分、判断一个链表是否为回文结构)

    1."之" 字形打印矩阵 [题目] 给定一个矩阵matrix, 按照"之" 字形的方式打印这个矩阵, 例如: 1 2 3 4 5 6 7 8 9 10 11 1 ...

  3. 数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构

    数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构 目录 打印两个有序链表公共部分 判断一个链表是否具有回文结构 1. 打印两个有序链表公共部分 1.问题描述 思路:Node1和N ...

  4. 判断一个链表是否为回文结构

    package class_03;import java.util.Stack;/*** * 判断一个链表是否为回文结构[题目] 给定一个链表的头节点head,请判断该链表是否为回文结构. 例如: 1 ...

  5. NC96 判断一个链表是否为回文结构

    NC96 判断一个链表是否为回文结构 描述 给定一个链表,请判断该链表是否为回文结构. 示例1 输入: [1] 复制 返回值: true 复制 示例2 输入: [2,1] 复制 返回值: false ...

  6. 牛客题霸 [判断一个链表是否为回文结构] C++题解/答案

    判断一个链表是否为回文结构 题目描述 给定一个链表,请判断该链表是否为回文结构. 题解: 直接将链表内的数据存入string中,然后从两端开始向中间判断即可 代码: /*** struct ListN ...

  7. c语言数据结构判断回文数,C++数据结构与算法之判断一个链表是否为回文结构的方法...

    本文实例讲述了C++判断一个链表是否为回文结构的方法.分享给大家供大家参考,具体如下: 题目: 给定一个链表头节点head,请判断是否为回文结构 例如: 1->2->1 true 1-&g ...

  8. 刷题日记-判断一个链表是否为回文结构

    判断一个链表是否为回文结构 描述 给定一个链表,请判断该链表是否为回文结构. 回文是指该字符串正序逆序完全一致. 数据范围: 链表节点数 0≤n≤10510^5105,链表中每个节点的值满足∣val∣ ...

  9. (十三)判断一个链表是否是回文结构

    判断一个链表是否是回文结构 判断一个链表是否是回文结构 栈实现 栈+快慢指针 有限个变量 判断一个链表是否是回文结构 [题目]给定一个单链表的头结点,请判断该链表是否为回文结构 [要求]如果链表长度为 ...

最新文章

  1. linux系统常用的中间件
  2. 点到线段的距离计算方法
  3. 1266: [AHOI2006]上学路线route
  4. Redis五种数据类型详解
  5. mac photoshop_我讨厌Photoshop…
  6. 苹果手机免密支付怎么取消_超市“扫码枪”有啥神奇功能?直接扫走你的资金,不用输入密码|移动支付|手机|免密...
  7. @RequestBody应用,requestbody
  8. sql server一对多怎么查询_Vlookup函数查找最后一个值和一对多查询
  9. JavaWeb——IOC
  10. 定义并调用函数 十进制转二进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...
  11. 经典卷积神经网络 LeNet 动手学深度学习v2 pytorch
  12. 眼动数据分析基础_数据处理
  13. java用dockerfile生成镜像_【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub...
  14. 显微镜下的大明内容_显微镜下的大明
  15. Visual Studio Installer 一直提取文件0B不动怎么办:修改DNS教程
  16. 猿创征文|pandas实现将矩阵导出到excel+对矩阵进行连接
  17. genymotion镜像下载慢使用迅雷下载
  18. gensim中的word2vec使用
  19. 【黑马程序员西安中心】我和传智有个梦!
  20. postgresql源码学习(53)—— vacuum②-lazy vacuum之heap_vacuum_rel函数

热门文章

  1. xcode 工程常见问题
  2. Python中程序的基本结构
  3. CSS background-image
  4. 失、思与诗-给那个在地坛里玩耍的孩子
  5. 【lwIP(第一章)】lwIP入门
  6. Hibernate实战——双向N-N关联
  7. 一元n次多项式的处理
  8. 杨绛:越是难熬的时候,人越要体面
  9. java模拟HTTP请求(集合了网上搜来的各种)
  10. 搞深度学习需掌握的基础数学知识