1. 题目

编写一个函数,检查输入的链表是否是回文的。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先快慢指针找到中点,断开(注意快指针要先走一步,偶数节点的时候保证均分)
  • 反转后半段,跟前半段比较即可
class Solution {public:bool isPalindrome(ListNode* head) {if(!head || !head->next)return true;ListNode *halfhead = NULL, *fast = head->next, *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}halfhead = slow->next;slow->next = NULL;//断开halfhead = reverseList(halfhead);//反转后半段while(head && halfhead)//比较{if(head->val != halfhead->val)return false;head = head->next;halfhead = halfhead->next;}return true;}ListNode* reverseList(ListNode *head){ListNode *prev = NULL, *cur = head, *nt = cur->next;while(cur && cur->next){cur->next = prev;prev = cur;cur = nt;nt = nt->next;}cur->next = prev;return cur;}
};

程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)相关推荐

  1. 程序员面试金典 - 面试题 02.08. 环路检测(快慢指针)

    1. 题目 给定一个有环链表,实现一个算法返回环路的开头节点. 有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路. 示例 1: 输入:head = [3,2 ...

  2. 编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

    题目难度: 简单 原题链接 题目描述 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. ...

  3. 程序员面试金典 - 面试题 01.04. 回文排列(哈希map)

    1. 题目 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. 示例1: 输入:&quo ...

  4. 程序员面试金典面试题 01.06. 字符串压缩

    前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...

  5. 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

    1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...

  6. 程序员面试金典 - 面试题 02.04. 分割链表

    1. 题目 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于" ...

  7. 程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)

    1. 题目 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, ...

  8. 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)

    1. 题目 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回null. 示例 1: 输入: ...

  9. 程序员面试金典 - 面试题 05.06. 整数转换(位运算)

    1. 题目 整数转换.编写一个函数,确定需要改变几个位才能将整数A转成整数B. 示例1:输入:A = 29 (或者0b11101), B = 15(或者0b01111)输出:2示例2:输入:A = 1 ...

最新文章

  1. Smarty vs Twig: 性能对比
  2. c++ - Create empty json array with jsoncpp - Stack Overflow
  3. 为RHEL5安装JDK和配置tomcat
  4. HDU ACM 4031 Attack (树状数组--单点查询+区间更新)
  5. 软定时器的删除与状态查询
  6. POJ 3922 A simple stone game(K倍减法游戏)
  7. Mining Precision Interface From Query Logs -- 学习笔记(二)
  8. beautiful sentences
  9. Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件
  10. 关于完全删除电脑上多余的tomcat服务器的解决办法
  11. 易校网校园综合跑腿小程序源码修复运营版
  12. vCenter上解决”此主机当前没有管理网络冗余“的警告
  13. Julia :关于函数返回类型::
  14. c语言判断sjis编码,loadrunner Web_类函数之web_sjis_to_euc_param()
  15. matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
  16. 2021毓英中学高考成绩查询,泉州知名中学2020高考成绩喜报龙虎榜
  17. 0X000000该内存不能为read的解决方法(转)
  18. Flutter | super.dispose() 的调用顺序
  19. 实时操作系统-与QNX比较-qnx系统优势-qnx性能分析-qnx系统性能分析
  20. 商务电子邮箱用什么邮箱好?商务邮件正确的打开方式

热门文章

  1. oracle数据库更新语句_20_手把手教你学Python之操作数据库
  2. docker mysql关掉后启动_Docker启动mysql的坑2
  3. android MPV架构快速实现,不是所有的MPV都叫GL8,一体化智能座舱体验来袭
  4. 11月16日 个人战立会议内容报告
  5. makefile / CMake
  6. c#调api串口通讯
  7. 任务并行VS数据并行
  8. jQuery心得5--jQuery深入了解串讲1
  9. std::unique_ptr<T>与boost::scoped_ptr<T>的特殊性
  10. Redis基数统计之HyperLogLog小内存大用处