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 ...
随机推荐
- ubuntu14.04环境下spyder的安装
在ubuntu14.04系统中,默认在/usr/lib目录下安装了python2.7.6和python3.4.3,在该环境下安装spyder,然后使其链接到python3.4.3. 首先安装为pyth ...
- webstorm ES6 转 ES5
一句话总结:用WebStorm自带的File Watcher功能+Babel实现自动转换ECMAScript 6代码为ES5代码 1. 新建一个Empty Project,然后在src目录下新建了一个 ...
- CNN车型分类总结
最近在做一个CNN车型分类的任务,首先先简要介绍一下这个任务. 总共30个类,训练集图片为车型图片,类似监控拍摄的车型图片,训练集测试集安6:4分,训练集有22302份数据,测试集有14893份数据. ...
- 《PHP字符串函数》笔记
① str_repeat() 重复一个字符串; ② str_shuffle() 随机打乱一个字符串; ③ strftime() 根据区域设置格式化本地时间/日期; ④ strip_tags() 从字符 ...
- 【iBeacon】iBeacon前沿初探技术备忘
iBeacon是工作在蓝牙4.0(BLE)硬件下的一种协议,属于蓝牙4.0广播协议的一种,通过该协议和一个蓝牙模块可以实现非接触的身份识别.位置检测等. How does BLE communicat ...
- 纯 CSS 绘制图形(心形、六边形等)
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- maven项目断点依赖maven插件
- 第二天--html+css
<!Doctype html><html> <head> <meta charset="utf-8"> ...
- JDBC的操作总结
JDBC 操作总结 JDBC是一组能够执行SQL语句的API JDBC的操作方式比较单一,简单的分为以下几个流程: 1.通过数据库厂商提供的JDB类库想DriverManager注册数据库驱动 ...
- 素数的平方阶群必为Abel群
定理 设$p$为素数,则$p^2$阶群$G$必为Abel群.