https://leetcode.com/problems/palindrome-linked-list/description/Given a singly linked list, determine if it is a palindrome.

Follow up:Could you do it in O(n) time and O(1) space?
time O(n) space:O(1)

(1) 先找中点
(2) 再reverse后半段
(3) 不用管两个子linked list的长度是否相等,从各个子链表的头开始一个一个比较。值不相等就返回false,相等就继续移动。

当取中点时,一定要 fast.next.next != null

 1 public boolean isPalindrome(ListNode head) {
 2         if (head == null) return true ;
 3         ListNode fast = head , slow = head ;
 4         ListNode mid = null ;
 5         //step 1: find the middle node: when fast reaches the end, slow reaches the mid
 6         //note: middle node has to be fast.next != null && fast.next.next != null
 7         while (fast != null && fast.next != null && fast.next.next != null){
 8             fast = fast.next.next ;
 9             slow = slow.next ;
10         }
11         //ab' b''a   mid == b'
12         mid = slow;
13         // secHalfHead == b''
14         ListNode secHalfHead = mid.next ;
15         //step 2: reverse the 2nd half
16         ListNode lastHead = reverse(secHalfHead) ;
17         //step 3: compare the 1st half with the 2nd half, if not the same return false
18         while (head != null && lastHead != null){
19             if (head.val != lastHead.val) {
20                 return false ;
21             }
22             head = head.next ;
23             lastHead = lastHead.next ;
24         }
25         return true ;
26     }
27
28     /*1->2->3->4   to 1<-2<-3<-4
29     *                          p c
30     * */
31     private ListNode reverse(ListNode head){
32         ListNode pre = null ;
33         ListNode curr = head ;
34         while (curr!= null){
35             ListNode temp = curr.next ;
36             curr.next = pre ;
37             pre = curr ;
38             curr = temp;
39         }
40         return pre ;
41     }

转载于:https://www.cnblogs.com/davidnyc/p/8464293.html

LC.234.Palindrome Linked List相关推荐

  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. 234. Palindrome Linked List - Easy

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

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

  5. LeetCode 234. Palindrome Linked List

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

  6. [LeetCode] 234. Palindrome Linked List_Easy tag: Linked List

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

  7. LeetCode 234 Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. 思路: 回文结构从后向前遍历与从前向后遍历的结果是相同的,可以利用一个栈的结构 ...

  8. leetcode python3 简单题234. Palindrome Linked List

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百三十四题 (1)题目 英文: Given a singly linked li ...

  9. [swift] 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 ...

  10. 【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) t ...

最新文章

  1. #113. 【UER #2】手机的生产
  2. android设置app全局没通知声,从android中的firebase发送通知时没有通知声音
  3. 改变Window下的习惯--认识Linux
  4. VisNetic MailServer 常见问题
  5. c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】
  6. Pascal Sentences数据集预处理
  7. CSS 中文字体格式
  8. 发几个flashxp注册码
  9. gitee.visualstudio.vsix 分享
  10. 使用apt更新和升级系统软件
  11. 贪吃蛇小游戏(基于Python)
  12. java读写yml文件
  13. 物联网技术到底是什么技术?
  14. Vue.js的简单趋势图
  15. PyTorch中tensor介绍
  16. kermit安装和配置
  17. 基于蓝牙网关技术的蓝牙室内定位系统--新导智能
  18. 垃圾分类查询+小程序源码
  19. linux mint pidgin 聊QQ
  20. Magicodes.IE 2.2发布

热门文章

  1. atitit 高并发之道 attilax著.docx 1. 概念 2 2. 并发一般涉及如下几个方面: 4 2.1. 多线程编程(已过时,不介绍) 4 2.2. 异步编程 4 2.3. 并行编程
  2. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游
  3. Atitti 过程导向 vs 结果导向 attilax的策略
  4. Atitit.  Exception in thread main java.lang.Error: Unresolved compilation problem:
  5. Atitit.软件开发的几大规则,法则,与原则p821.doc
  6. paip.银行卡号的效检
  7. paip.提升安全性-------用户口令密码的检测与生成
  8. Julia : win下cmd和repl中执行.jl程序
  9. Rust: 外部函数接口(FFI)
  10. 网络安全行业全景图(2019年1月)