LC.234.Palindrome Linked List
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相关推荐
- 【回文串7】LeetCode 234. Palindrome Linked List
LeetCode 234. Palindrome Linked List Solution1:我的答案 一遍过,哈哈哈! /*** Definition for singly-linked list. ...
- [LeetCode] 234. Palindrome Linked List 回文链表
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- 234. Palindrome Linked List - Easy
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- 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 ...
- LeetCode 234. Palindrome Linked List
题目: Given a singly linked list, determine if it is a palindrome. 思路: 给定一个链表,判断它是不是回文链表 根据链表的奇偶分情况,然后 ...
- [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 ...
- LeetCode 234 Palindrome Linked List
Given a singly linked list, determine if it is a palindrome. 思路: 回文结构从后向前遍历与从前向后遍历的结果是相同的,可以利用一个栈的结构 ...
- leetcode python3 简单题234. Palindrome Linked List
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百三十四题 (1)题目 英文: Given a singly linked li ...
- [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 ...
- 【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 ...
最新文章
- #113. 【UER #2】手机的生产
- android设置app全局没通知声,从android中的firebase发送通知时没有通知声音
- 改变Window下的习惯--认识Linux
- VisNetic MailServer 常见问题
- c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】
- Pascal Sentences数据集预处理
- CSS 中文字体格式
- 发几个flashxp注册码
- gitee.visualstudio.vsix 分享
- 使用apt更新和升级系统软件
- 贪吃蛇小游戏(基于Python)
- java读写yml文件
- 物联网技术到底是什么技术?
- Vue.js的简单趋势图
- PyTorch中tensor介绍
- kermit安装和配置
- 基于蓝牙网关技术的蓝牙室内定位系统--新导智能
- 垃圾分类查询+小程序源码
- linux mint pidgin 聊QQ
- Magicodes.IE 2.2发布
热门文章
- atitit 高并发之道 attilax著.docx 1. 概念	2 2. 并发一般涉及如下几个方面:	4 2.1. 多线程编程(已过时,不介绍)	4 2.2. 异步编程	4 2.3. 并行编程
- atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线	1 2. 爬虫产品线	1 3. 发帖机产品线	1 4. 发动机产品线	1 5. O2o产品线(旅游
- Atitti 过程导向 vs 结果导向 attilax的策略
- Atitit. Exception in thread main java.lang.Error: Unresolved compilation problem:
- Atitit.软件开发的几大规则,法则,与原则p821.doc
- paip.银行卡号的效检
- paip.提升安全性-------用户口令密码的检测与生成
- Julia : win下cmd和repl中执行.jl程序
- Rust: 外部函数接口(FFI)
- 网络安全行业全景图(2019年1月)