题目描述:

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false
示例 2: 输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

思路分析:

思路一:借助辅助栈和辅助队列,链表节点依次入队列和入栈,依次出栈和出队,判断是否相等即可

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public static boolean isPalindrome(ListNode head) { //借助一个栈和一个队列去判断
Deque<ListNode> deque = new LinkedList<>();
Stack<ListNode> helper = new Stack<>();
int count = 0;
while (head != null) {
deque.addLast(head);
helper.push(head);
head = head.next;
count++;
}
for (int i = 0; i < count; i++) {
if (deque.poll().val != helper.pop().val) {
return false;
}
} return true;
}
}

时间复杂度:O(n)

空间复杂度:O(2n)->O(n)

思路二:快慢指针

思想很简单,用2个指针,一个low,一个fast,fast是low的2倍,所以可以达到2分链表的效果,在移动指针时同时对前半部分链表进行反转。最后直接比较被分开的2个链表。因为不能改变当前slow的next,不然就无法跳到下一个元素,所以这里用pre和prepre实现指针的反转

代码实现:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
//快慢指针:边遍历边翻转前半段
public static boolean isPalindrome(ListNode head) { if (head == null || head.next == null) {
return true;
}
ListNode slow = head;
ListNode fast = head.next;
ListNode preNode = null;
ListNode pre2Node = null;
while (fast != null && fast.next != null) { preNode = slow;
//此处因为不能丢失slow.next,所以使用preNode和pre2Node实现链表的翻转
slow = slow.next;
fast = fast.next.next;
preNode.next = pre2Node;
pre2Node = preNode;
}
//链表被分成两个部分,qNode表示后链表的头
ListNode qNode = slow.next;
//注意,因为之前没有指定slow.next指向哪个节点,此处要做指定(之前为了持续遍历,slow.next一直指向原链表的下一个节点)
slow.next = preNode;
//考虑奇偶:如果链表节点个数为偶数,则前链表的表头为slow,否则为slow.next
ListNode pNode = fast == null ? slow.next : slow;
while (qNode != null && pNode != null) {
if (qNode.val != pNode.val) {
return false;
}
qNode = qNode.next;
pNode = pNode.next;
}
return true;
}
}

时间复杂度:O(n)

空间复杂度:O(1)

leetcode题目234.回文链表(快慢指针+辅助空间-简单)的更多相关文章

  1. [LeetCode题解]234. 回文链表 | 快慢指针 + 反转链表

    解题思路 找到后半部分链表,再反转.然后与前半部分链表比较 代码 /** * Definition for singly-linked list. * public class ListNode { ...

  2. Leetcode:234 回文链表

    leetcode:234 回文链表 关键点:请判断一个链表是否为回文链表.示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true. ...

  3. Java实现 LeetCode 234 回文链表

    234. 回文链表 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否 ...

  4. Leetcode 234. 回文链表(进阶)

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

  5. LeetCode 234——回文链表

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

  6. [LeetCode] 234. 回文链表 ☆(翻转链表)

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

  7. leetcode 234 回文链表 Palindrome Linked List

    要求用O(n)时间,和O(1)空间,因此思路是用本身链表进行判断,既然考虑回文,本方法思想是先遍历一次求链表长度,然后翻转前半部分链表:然后同时对前半部分链表和后半部分链表遍历,来判断对应节点的值是否 ...

  8. LeetCode 234. 回文链表

    class Solution { public: bool isPalindrome(ListNode* head) { deque<int> d1, d2; ListNode* p = ...

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

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

随机推荐

  1. linux 打包与解压命令--常用

    一般情况用这俩个就足以了 压缩 tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jp ...

  2. JDK + Tomcat 安装 + 制作自定义镜像【第 3 篇 系统镜像】

    [第 1 篇 JDK]:https://www.cnblogs.com/del88/p/11842387.html[第 2 篇 Tomcat]:https://www.cnblogs.com/del8 ...

  3. python+requests模拟登陆 学校选课系统

    最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...

  4. 9.SpringMVC注解式开发-处理器的请求映射规则的定义

    1.对请求URI的命名空间的定义 @RequestMapping的value属性用于定义所匹配请求的URI.但对于注解在方法上和注解在类上, 其value 属性 所指定的URI,意义是不同的 一个@C ...

  5. sql循环-游标、临时表、表变量

    游标 在游标逐行处理过程中,当需要处理的记录数较大,而且游标处理位于数据库事务内时,速度非常慢. -- 声明变量 DECLARE @Id AS Int -- 声明游标 DECLARE C_Id CUR ...

  6. Matlab---绘制柱状图

    Matlab---绘制柱状图 目录: hist()函数 histc( )函数 bar()函数 正文: 注意区分:频率.频数分布直方图. 一.             hist()函数 hist():实 ...

  7. chrome上一些好用的插件

    1. Super Auto Refresh Plus - 这个插件可以自动刷新网页 2. 屏蔽百度推广 - 这个插件可以屏蔽百度搜索的推广广告

  8. CSCD核心,北大中文核心

    从两篇文章看两个杂志 title 子空间聚类的重建模型及其快速算法 稀疏正则非凸优化问题之全局收敛分析 author 夏雨晴(浙江大学数学科学学院),张振跃 储敏(武汉大学数学与统计学院) journ ...

  9. [NOI2014]购票——斜率优化+树链剖分+线段树

    建议到UOJ上去交 题解 一眼\(DP\),先把转移方程写出来 设\(dp[i]\)为从点\(i\)出发到点\(1\)的最小费用,那么存在转移 \[f[i]=min\{f[j]+(d[i]-d[j]) ...

  10. centos7部署mysql5.7一主多从

    /usr/share/mysql/charsets/ 服务器 ip 操作系统 mysql Mysql_master 192.168.188.11 centos7 5.7 Mysql_slave1 19 ...