程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)
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. 回文链表(快慢指针+链表反转)相关推荐
- 程序员面试金典 - 面试题 02.08. 环路检测(快慢指针)
1. 题目 给定一个有环链表,实现一个算法返回环路的开头节点. 有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路. 示例 1: 输入:head = [3,2 ...
- 编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列
题目难度: 简单 原题链接 题目描述 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. ...
- 程序员面试金典 - 面试题 01.04. 回文排列(哈希map)
1. 题目 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. 示例1: 输入:&quo ...
- 程序员面试金典面试题 01.06. 字符串压缩
前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...
- 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)
1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...
- 程序员面试金典 - 面试题 02.04. 分割链表
1. 题目 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于" ...
- 程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)
1. 题目 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, ...
- 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)
1. 题目 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回null. 示例 1: 输入: ...
- 程序员面试金典 - 面试题 05.06. 整数转换(位运算)
1. 题目 整数转换.编写一个函数,确定需要改变几个位才能将整数A转成整数B. 示例1:输入:A = 29 (或者0b11101), B = 15(或者0b01111)输出:2示例2:输入:A = 1 ...
最新文章
- Smarty vs Twig: 性能对比
- c++ - Create empty json array with jsoncpp - Stack Overflow
- 为RHEL5安装JDK和配置tomcat
- HDU ACM 4031 Attack (树状数组--单点查询+区间更新)
- 软定时器的删除与状态查询
- POJ 3922 A simple stone game(K倍减法游戏)
- Mining Precision Interface From Query Logs -- 学习笔记(二)
- beautiful sentences
- Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件
- 关于完全删除电脑上多余的tomcat服务器的解决办法
- 易校网校园综合跑腿小程序源码修复运营版
- vCenter上解决”此主机当前没有管理网络冗余“的警告
- Julia :关于函数返回类型::
- c语言判断sjis编码,loadrunner Web_类函数之web_sjis_to_euc_param()
- matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
- 2021毓英中学高考成绩查询,泉州知名中学2020高考成绩喜报龙虎榜
- 0X000000该内存不能为read的解决方法(转)
- Flutter | super.dispose() 的调用顺序
- 实时操作系统-与QNX比较-qnx系统优势-qnx性能分析-qnx系统性能分析
- 商务电子邮箱用什么邮箱好?商务邮件正确的打开方式
热门文章
- oracle数据库更新语句_20_手把手教你学Python之操作数据库
- docker mysql关掉后启动_Docker启动mysql的坑2
- android MPV架构快速实现,不是所有的MPV都叫GL8,一体化智能座舱体验来袭
- 11月16日 个人战立会议内容报告
- makefile / CMake
- c#调api串口通讯
- 任务并行VS数据并行
- jQuery心得5--jQuery深入了解串讲1
- std::unique_ptr<T>与boost::scoped_ptr<T>的特殊性
- Redis基数统计之HyperLogLog小内存大用处