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的更多相关文章

  1. [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 ...

  2. LeetCode——Palindrome Linked List

    Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...

  3. 【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 ...

  4. 【leetcode】234. Palindrome Linked List

    234. Palindrome Linked List 1. 使用快慢指针找中点的原理是fast和slow两个指针,每次快指针走两步,慢指针走一步,等快指针走完时,慢指针的位置就是中点.如果是偶数个数 ...

  5. 【LeetCode】234. Palindrome Linked List (2 solutions)

    Palindrome Linked List Given a singly linked list, determine if it is a palindrome. Follow up:Could ...

  6. 234. Palindrome Linked List - LeetCode

    Question 234. Palindrome Linked List Solution 题目大意:给一个链表,判断是该链表中的元素组成的串是否回文 思路:遍历链表添加到一个list中,再遍历lis ...

  7. [LeetCode] Reverse Linked List 倒置链表

    Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...

  8. [LeetCode] Palindrome Number 验证回文数字

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

  9. [CareerCup] 2.7 Palindrome Linked List 回文链表

    2.7 Implement a function to check if a linked list is a palindrome. LeetCode上的原题,参见我之前的博客Palindrome ...

随机推荐

  1. URI编码解码

    .NET string s= System.Web.HttpUtility.UrlEncode("123", System.Text.Encoding.Unicode); //编码 ...

  2. Ajax深入解析

    AJAX:Asynchronous JavaScript And Xml(异步的JS和XML) 同步:客户端发起请求>服务端的处理和响应>客户端重新载入页面(循环) 异步:客户端实时请求& ...

  3. linux之netstat命令

    netstat用于显示各种网络相关的信息,如网络连接,路由表接口状态(interface statistics), masquerade连接,多播成员(Multicast Memberships)等等 ...

  4. MVC中使用Entity Framework 基于方法的查询学习笔记 (一)

    EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...

  5. 伪元素::after和::before

    ::after是一个CSS伪元素,使用::after,你可以从CSS里往页面上新增内容(不再要在HTML里有相应的东西).虽然最终生成的东西并不是真正的DOM里的内容,但这些内容能像普通内容一样显示, ...

  6. CodeIgniter 3 源码学习笔记《一》

    CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包. 它的目标是让你能够更快速的开发,它提供了日常任务中所需的大量类库, 以及简单的接口和逻辑结构.通过减少代码量,Co ...

  7. 裸奔单片机GUI

    #include "main.h"#ifndef __STD_GUI_CONTEX__#define __STD_GUI_CONTEX__ #define CPSTRSIZE 20 ...

  8. request:getParameter getAttribute

    转载自:http://www.cnblogs.com/shaohz2014/p/3804656.html 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost:88 ...

  9. CentOS7 下ifconfig command not found解决办法

    今天尝鲜用VMWare安装了CentOS7,选择了最小安装包模式,安装完毕之后想查看一下本机的ip地址,发现报错 # ifcon -bash: ifconfig: command not found ...

  10. TextView属性android:ellipsize="marquee"不生效的解决办法

    最近自己在写自己的第一个app,过程中遇到了这个问题,查了不少帖子,经过尝试发现,这种问题一般分为两类: 1. TextView的Text值赋值后不更改,很多帖子上说如下写法就可以生效: <Te ...