题目描述:回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

示例:

输入:head = [1,2,2,1]
输出:true

题目分析:找到原链表的中间节点并反转中间节点之后的子链表

//偶数个节点的情况
1-->2-->2-->1
中间节点的子链表:2-->1  reverse  1-->2  (记为L2)
原链表:1-->2-->2-->1  (记为L1)L1:1-->2-->2-->1
L2:1-->2-->null//奇数个节点的情况
1-->2-->3-->2-->1
中间节点的子链表:3-->2-->1  reverse  1-->2-->3  (记为L2)
原链表:1-->2-->2-->1  (记为L1)L1:1-->2-->2-->1
L2:1-->2-->3-->null
  • 同时遍历L1与L2,当二者均不为空时,依次取出值判断是否相等,只要有一个不相等就不是回文链表。
  • 因为L2的长度一定是小于或者等于原链表的,遍历时若L2指向空,则说明遍历已经结束。

代码实现:

package LeetCode;
//回文链表=中间节点+反转链表
public class Num234 {public boolean isPalindrome(ListNode head) {//1.找到中间节点ListNode middleNode = middleNode(head);//2.反转中间节点后的子链表ListNode l2 = reverseList(middleNode);//3.同时遍历原先链表与l2while(l2 != null){if (head.val != l2.val){return false;}l2 = l2.next;head = head.next;}return true;}public ListNode middleNode(ListNode head) {//fast 一次走两步ListNode fast = head;//low一次走一步ListNode low = head;while(fast != null && fast.next != null){low = low.next;fast =fast.next.next;}return low;}public ListNode reverseList (ListNode head){//1、判空if (head ==null || head.next == null){return head;}ListNode sec = head.next;//2、反转第二个节点之后的子链表ListNode newHead = reverseList(head.next);//3、处理head与sec关系sec.next = head;head.next = null;return  newHead;}
}

LeetCode 234相关推荐

  1. 【回文串7】LeetCode 234. Palindrome Linked List

    LeetCode 234. Palindrome Linked List Solution1:我的答案 一遍过,哈哈哈! /*** Definition for singly-linked list. ...

  2. [LeetCode] 234. Palindrome Linked List 回文链表

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  3. LeetCode 234. 回文链表(快慢指针+链表反转)

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

  4. Leetcode 234. 回文链表 解题思路及C++实现

    解题思路: 先用快慢指针找到链表的中间节点,然后将链表一分为二: 然后将后半部分链表进行翻转,用到三个指针: 接着分别遍历两个链表,逐个比较 val 值,如果出现不相等,就返回 false. /*** ...

  5. 34. Leetcode 234. 回文链表 (链表-双指针)

    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表.如果是,返回 true :否则,返回 false .示例 1:输入:head = [1,2,2,1] 输出:true 示例 2:输入: ...

  6. Leetcode 234 回文链表 (每日一题 20210730)

    请判断一个链表是否为回文链表.示例 1:输入: 1->2 输出: false 示例 2:输入: 1->2->2->1 输出: true题目地址:https://leetcode ...

  7. LeetCode 234 回文链表

    原题链接 解题思路:使用vector来存储链表,然后来检查其中每一个元素,是否组成回文 /*** Definition for singly-linked list.* struct ListNode ...

  8. leetcode 234. 回文链表(快慢指针+链表倒置)

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 代码 /*** Definitio ...

  9. LeetCode 234. Palindrome Linked List

    题目: Given a singly linked list, determine if it is a palindrome. 思路: 给定一个链表,判断它是不是回文链表 根据链表的奇偶分情况,然后 ...

最新文章

  1. 图解Oracle 12c 手动建库
  2. Android报表库aChartEngine系列
  3. Android-源码剖析CountDownTimer(倒计时类)
  4. 一线大厂为什么对免费的开源项目这么热衷?
  5. java企业人事管理系统源码_企业人事管理系统完美版源代码 - 源码下载|行业应用软件|企业管理(财务/ERP/EIP等)|源代码 - 源码中国...
  6. 软件测试——0319作业
  7. 来来来!java页面导出数据到excel
  8. JavaScript文档对象模型document对象改变Html元素样式属性(5)
  9. C语言进阶——使用C语言与gnuplot结合画一些波形
  10. 转:ibatis配置简介
  11. php 遍历文件夹下的所有文件名以及文件大小
  12. 一步一步 IText.Sharp
  13. oracle中文转全拼音,oracle汉字转拼音
  14. 算法入门到进阶(一)——算法复杂度
  15. 数据治理-HDFS废弃文件、Hive废弃表检测与清理
  16. Excel VBA 入门基础
  17. cephfs:1 clients failing to respond to cache pressure原因分析
  18. mac下chrome导入证书
  19. 求矩阵中非零元素个数(L0范式)
  20. Flying-Saucer使用HTML或者FTL(Freemarker模板)生成PDF

热门文章

  1. DNS 服务器配置03
  2. 阿里巴巴区签约重庆,这些合作亮点你不得不知!
  3. 用php做一个网站,如何用PHP开发一个完整的网站
  4. 操作系统课后答案第四章
  5. 【日常】计算机操作系统入门
  6. linux装图像识别软件,Ubuntu下安装OCR扫描软件gImageReader
  7. windows10自带的输入法如何将繁体字切换成简体
  8. php5.3 发送邮件phpemail的使用 (适用php5.3)
  9. 毕业设计 - java web 进销存管理系统的设计与实现【源码+论文】
  10. Cisco服务器怎么安装系统,Cisco MCS服务器上Microsoft操作系统补丁安装发生故障