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

示例 1:

输入: 1->2
输出: false

示例2:

输入: 1->2->2->1
输出: true

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

解题思路:使用双指针,一个指针每次走一步,一个指针每次走两步,当快指针到达结尾时,慢指针刚好到达链表中间。要注意的是,链表的长度可能是奇数也可能是偶数的,所以在找到链表的中间点之后需要判断一下链表长度是奇数还是偶数。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:bool isPalindrome(ListNode* head) {if(head==NULL || head->next==NULL)  # 如果链表为空或者长度为1,则为回文链表return 1;ListNode* slow = head;  # 慢指针,每次走一步ListNode* fast = head;  # 快指针,每次走两步ListNode* now = head;  # 用于将前一半的链表进行翻转ListNode* last = NULL;  # 用于将前一半的链表进行翻转while(fast!=NULL && fast->next!=NULL)  # 找到链表的中间点,并将前半部分链表进行翻转{now = slow;slow = slow->next;fast = fast->next->next;now->next = last;last = now;}if(fast != NULL)  # 判断链表长度为奇数还是偶数,如果是偶数,指针slow需要加1,画图就可以理解slow = slow->next;while(slow!=NULL && now!=NULL)  # 将两段链表进行判断{if(slow->val!=now->val)  # 如果值不同证明不是回文链表return 0;slow = slow->next;now = now->next;}return 1;}
};

leetcode - 234. 回文链表相关推荐

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

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

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

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

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

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

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

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

  5. LeetCode 234 回文链表

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

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

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

  7. 【LeetCode】【HOT】234. 回文链表(存入数组)

    [LeetCode][HOT]234. 回文链表 文章目录 [LeetCode][HOT]234. 回文链表 package hot;import java.util.ArrayList; impor ...

  8. LeedCode篇:234. 回文链表

    234. 回文链表 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.先用快慢指针找到中间节点 2.后半个链表逆置 3.然后一一比较 源码: bool isPalindrome(struc ...

  9. [234] 回文链表

    [234] 回文链表 //请判断一个链表是否为回文链表. // // 示例 1: // // 输入: 1->2 //输出: false // // 示例 2: // // 输入: 1->2 ...

最新文章

  1. java --级联操作(查询/更新)
  2. PAT甲级1039 Course List for Student :[C++题解]排序、哈希表
  3. ​5G+AI时代的高效视频处理
  4. 信息学奥赛一本通——1000:入门测试题目
  5. Truncated incorrect DOUBLE value: 'xxx'的解决方法
  6. jquery学习记录
  7. Django总叙(转)
  8. JUC学习之CountDownLatch入门
  9. 交通分配四阶段法(一)
  10. python 读取TXT文件数据(字符或数值)存放在numpy数组中以及训练集测试集的处理(1)(个人笔记)
  11. 身份证号判断是否合法(具体代码)
  12. 简单工厂模式、工厂模式、抽象工厂模式
  13. 图片怎么修改尺寸大小?在线调整图像大小的方法
  14. [附源码]java毕业设计网络学习平台
  15. 【工程/物理光学(三)——光的干涉技术】
  16. selenium之DDT:使用DDT模块实现数据驱动测试
  17. 【独角日“爆”】携程或计划从纳斯达克退市;雷军入驻B站;台积电市值反超英特尔...
  18. mybatis-plus 存储布尔值true、false
  19. 基于JSP技术进行信息交互的研究与应用
  20. Python后端技术栈

热门文章

  1. 利用优先级队列实现堆栈
  2. 一个Web开发的客户端基础技术测试Demo
  3. Git如何从众多提交中保留个别提交
  4. Nginx反向代理与负载均衡等配置文件示例
  5. ORA-12899: value too large for column (actual: 27, maximum: 20)错误解决
  6. Redis面试 - redis 都有哪些数据类型?
  7. ZooKeeper管理员指南 部署和管理指南
  8. 使用meterpreter让没有安装python解释器的肉鸡设备执行任意python程序
  9. json写入数据库或生成excel
  10. git远程仓库的使用