Leetcode Palindrome Linked List
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?
题目意思:
给定一个单链表,判断它是不是回文串
进一步思考:
你可以在O(n)时间复杂度和O(1)空间复杂度完成吗?
解题思路:
方法一:通过反转链表实现
(1)使用快慢指针寻找链表中点
(2)将链表的后半部分就地逆置
(3)比较前后两半的元素是否一致
(4)恢复原始链表的结构
方法二:通过递归实现
(1)递归遍历链表到最后一个元素
(2)如果第一个元素和最后一个元素相等,则递归回退,且第一个元素left=left->next
(3)如果所有元素相等,则认为是回文串
源代码:
方法一:
class Solution {
public:
bool isPalindrome(ListNode* head) {
if(head == NULL || head->next == NULL ) return true;
ListNode* fast = head, *slow = head;
while(fast->next && fast->next->next){
fast = fast->next->next;
slow = slow->next;
}
ListNode *p = slow->next, *second = NULL;
while(p){
ListNode* tmp = p->next;
p->next = second;
second = p;
p = tmp;
}
ListNode* p1 = head, *p2 = second;
while(p2 && p1->val == p2->val){
p1 = p1->next;
p2 = p2->next;
}
p = second; second = NULL;
while(p ){
ListNode *tmp = p->next;
p->next = second;
second = p;
p = tmp;
}
return p2 == NULL ;
}
};
方法二:
class Solution {
public:
bool isPalindrome_aux(ListNode** left, ListNode* right){
if(right == NULL) return true;
if(!isPalindrome_aux(left,right->next)) return false;
bool res = (right->val == (*left)->val);
*left = (*left)->next;
return res;
}
bool isPalindrome(ListNode* head) {
return isPalindrome_aux(&head,head);
}
};
Leetcode Palindrome Linked List的更多相关文章
- [LeetCode] 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——Palindrome Linked List
Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...
- 【LeetCode】9 & 234 & 206 - Palindrome Number & Palindrome Linked List & Reverse Linked List
9 - Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. Som ...
- 【leetcode】234. Palindrome Linked List
234. Palindrome Linked List 1. 使用快慢指针找中点的原理是fast和slow两个指针,每次快指针走两步,慢指针走一步,等快指针走完时,慢指针的位置就是中点.如果是偶数个数 ...
- 【LeetCode】234. Palindrome Linked List (2 solutions)
Palindrome Linked List Given a singly linked list, determine if it is a palindrome. Follow up:Could ...
- 234. Palindrome Linked List - LeetCode
Question 234. Palindrome Linked List Solution 题目大意:给一个链表,判断是该链表中的元素组成的串是否回文 思路:遍历链表添加到一个list中,再遍历lis ...
- [LeetCode] Reverse Linked List 倒置链表
Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...
- [LeetCode] Palindrome Number 验证回文数字
Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...
- [CareerCup] 2.7 Palindrome Linked List 回文链表
2.7 Implement a function to check if a linked list is a palindrome. LeetCode上的原题,参见我之前的博客Palindrome ...
随机推荐
- Error:failed to find Build Tools revision 23.0.0 rc3
解决,选择AS里有的版本就可以了,已有的我这就一个23.0.3,导入的项目是23.0.2 Donate:)
- HTTP的客户端识别与cookie机制
本文是<HTTP权威指南>的读书笔记 Web服务器可能同时在与数千个客户端同时进行会话,服务器需要记录下它们在与谁交谈,而不是认为所有的请求都来自于匿名客户端.在HTTP中可以有以下几种方 ...
- BZOJ 2081: [Poi2010]Beads
Description 问把n截成每个长度后不同子串个数. Sol 调和极数+Hash. 首先这是一个式子 \(n\sum_{i=1}^n \frac {1}{i}\) . 这东西就是调和极数再乘上 ...
- python之路十三
前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...
- 使用KRPano资源分析工具一键下载全景网站切片图
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
- 不得不说的wepapi 优化
1:在你的ASP.NET Web API中使用GZIP 或 Deflate .对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式.这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我 ...
- iOS监听tableView组头切换事件
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...
- Linux中杀不死的进程
前段时间,一哥们,去杀Linux服务器的进程,发现kill命令失灵了,怎么杀都杀不死. 然后上网查了下资料,原来是要被杀的进程,成为了僵尸进程. 僵尸进程的查看方法: 利用命令ps,可以看到有标记为Z ...
- Linux中文件颜色所代表的属性和颜色
绿色文件: 可执行文件,可执行的程序 红色文件:压缩文件或者包文件 蓝色文件:目录 白色文件:一般性文件,如文本文件,配置文件,源码文件等 浅蓝色文件:链接文件,主要是使用ln命令 ...
- Oracle over函数
Oracle over函数 SQL code: sql over的作用及用法RANK ( ) OVER ( [query_partition_clause] order_by_clause )DE ...