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

package live.every.day.ProgrammingDesign.CodingInterviewGuide.List;/*** 判断一个链表是否为回文结构** 【题目】* 给定一个链表的头节点head,请判断该链表是否为回文结构。* 进阶:如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。** 【难度】* 中等** 【解答】* 方法三:* 方法三不需要栈和其他数据结构,只用有限几个变量,其额外空间复杂度为O(1),就可以在时间复杂度为O(N)内完成所有的过程,也就是* 满足进阶的要求。具体过程如下:* 1、首先改变链表右半区的结构,使整个右半区反转,最后指向中间节点。我们将左半区的第一个节点(也就是原链表的头节点)记为* leftStart,右半区反转之后最右边的节点(也就是原链表的最后一个节点)记为rightStart。* 2、leftStart和rightStart同时向中间点移动,移动每一步都比较leftStart和rightStart节点的值,看是否一样。如果都一样,* 说明链表为回文结构,否则不是回文结构。* 3、不管最后返回的是true还是false,在返回前都应该把链表恢复成原来的样子。* 4、链表恢复成原来的结构之后,返回检查结果。* 粗看起来,虽然方法三的整个过程也没有多少难度,但要想用有限几个变量完成以上所有的操作,在实现上还是比较考查代码实现能力的。** @author Created by LiveEveryDay*/public class PalindromeListSolution3 {public static class Node {public int data;public Node next;public Node(int data) {this.data = data;}}public static boolean isPalindrome(Node head) {if (head == null || head.next == null) {return true;}Node n1 = head;Node n2 = head;// 查找中间节点while (n2.next != null && n2.next.next != null) {// n1 -> 中部n1 = n1.next;// n2 -> 结尾n2 = n2.next.next;}// n2 -> 右部分第一个节点n2 = n1.next;// mid.next -> nulln1.next = null;Node n3 = null;// 右半区反转while (n2 != null) {// n3 -> 保存下一个节点n3 = n2.next;// 下一个反转节点n2.next = n1;// n1移动n1 = n2;// n2移动n2 = n3;}// n3 -> 保存最后一个节点n3 = n1;// n2 -> 左边第一个节点n2 = head;boolean res = true;// 检查回文while (n1 != null && n2 != null) {if (n1.data != n2.data) {res = false;break;}// 从左到中部n1 = n1.next;// 从右到中部n2 = n2.next;}n1 = n3.next;n3.next = null;// 恢复列表while (n1 != null) {n2 = n1.next;n1.next = n3;n3 = n1;n1 = n2;}return res;}public static void main(String[] args) {Node node1 = new Node(1);Node node2 = new Node(2);Node node3 = new Node(3);Node node4 = new Node(2);Node node5 = new Node(1);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;node5.next = null;System.out.printf("Is list palindrome: %s", isPalindrome(node1));}}// ------ Output ------
/*
Is list palindrome: true
*/

判断一个链表是否为回文结构-Java:解法三相关推荐

  1. 判断一个链表是否为回文结构【Java实现】

    题目:给定一个链表的头节点head,请判断该链表是否为回文结构. 如:1 2 1 返回true 1 2 2 1 返回true 1 2 3 返回false 思路一: 利用栈,从左到右遍历链表,然后将每一 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Device eth0 does not seem to be present,delaying initialization.
  2. Python可以这样学(第四季:数据分析与科学计算可视化)-董付国-专题视频课程...
  3. mac显示网速_Mac系统怎么查看测试网速
  4. caffe loss layer
  5. 在centos 7.0上利用yum一键安装mono
  6. 最长双重叠字符串java_java – 重复但重叠的字符串的算法
  7. python网盘开发_python实现网盘自动化操作(GUI版)
  8. 数据库习题(填空题三)
  9. 聚来宝获商务部《媒体购物国家标准》制订单位 【2012-12-22 17:04:20】【来源:京华网】【字体:大 中 小】【颜色:红 绿 蓝 黑】【分享新闻】
  10. MathType初级教程:怎么安装MathType
  11. 怎么对网站ICP备案和公安备案流程
  12. 浅谈如何根治慢性扁桃体炎-个人经验总结
  13. 直连网线和交叉网线的线序
  14. k8s可视化管理工具
  15. 图解密码技术学习笔记
  16. 基于Atmel128A单片机的MP31.0设计
  17. FineReport 报表数据根据下拉框的值进行数据联动
  18. sentinel1 SNAP水体提取
  19. SaaS模式、技术与案例详解——第11章 可配置性
  20. CamStudio——手用得录屏软件

热门文章

  1. 今日诗句第一期:路人攀折半成荒,何似山中自在芳 --严粲(折半查找)
  2. 今天14:00|AAAI 专场二,复旦、上海交大、NUIST等8位讲者
  3. 智慧树怎么导入教务系统的课_西南交通大学希望学院 关于2019—2020学年春季学期公共任选课的选课通知...
  4. openssl的man中文文档
  5. python正则判断_python正则表达式
  6. 【Swoole系列2.1】先把Swoole跑起来
  7. ubuntu16.04 安装gnome经典桌面
  8. 不调用C++/C字符串库函数,实现字符串复制函数strcpy
  9. elementui 分页与tabe数据绑定
  10. helm安装postgres_Helm 安装使用