57-Palindrome Linked List
- Palindrome Linked List   My Submissions QuestionEditorial Solution 
 Total Accepted: 46990 Total Submissions: 166743 Difficulty: Easy
 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(n)的算法,思路就是顺序把值放入到顺序表 
然后在顺序表判定回文
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        vector<int> vals;
        while(head!=NULL){
            vals.push_back(head->val);
            head = head->next;
        }
        int n = vals.size(),flag=0;
        for(int i=0;i<n/2;++i)
            if(vals[i]!=vals[n-1-i]){
                flag =1;
                break;
            }
        if(flag==1)return false;
        else return true;
    }
};给出O(n)空间O(1)的算法,虽然代码长很多,但是省空间啊!! 
思想:O->O->O->O->O前半部分逆转,然后中间出发向两端比较
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        if(head==NULL||head->next==NULL)return true;
        int len=0;
        ListNode *p =head;
        while(p!=NULL){
            len++;
            p=p->next;
        }
        if(len==2)return head->next->val==head->val; //因为逆转的时候是针对大于等于2(2*2就是4)的情况来考虑,所以先处理小于4
        if(len==3)return head->val==head->next->next->val;
        int i=1;
        ListNode *fir=head,*sec=head;
        while(i++<len/2)fir=fir->next;
        if(len%2==0)sec = fir->next;
        else sec = fir->next->next;
        if(len>=4){          //逆转前半部分
            ListNode *pre_next = fir->next;
            ListNode *tmp=head->next,*pretmp = head;
            while(tmp!=NULL&&tmp!=pre_next){
                ListNode *tmpnext = tmp->next;
                tmp->next = pretmp;
                pretmp = tmp;
                tmp=tmpnext;
            }
            head->next=NULL;
        }
        while(fir!=NULL){  //从中间出发判断回文
            if(fir->val!=sec->val)return false;
            fir = fir->next;
            sec = sec->next;
        }
        return true;
    }
};57-Palindrome Linked List的更多相关文章
- [CareerCup] 2.7 Palindrome Linked List 回文链表
		2.7 Implement a function to check if a linked list is a palindrome. LeetCode上的原题,参见我之前的博客Palindrome ... 
- 【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【easy】
		234. Palindrome Linked List[easy] Given a singly linked list, determine if it is a palindrome. Follo ... 
- LeetCode_234. Palindrome Linked List
		234. Palindrome Linked List Easy Given a singly linked list, determine if it is a palindrome. Exampl ... 
- 234. Palindrome Linked List - LeetCode
		Question 234. Palindrome Linked List Solution 题目大意:给一个链表,判断是该链表中的元素组成的串是否回文 思路:遍历链表添加到一个list中,再遍历lis ... 
- [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
		Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ... 
- Palindrome Linked List
		Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ... 
随机推荐
- logstash的安装和简单使用
			logstash的安装和简单使用 一.安装 1.下载并解压 2.logstash 一些命令行参数 1.查看帮助信息 2.加载指定pipeline文件路径 3.检测配置文件语法是否有错误 4.热加载pi ... 
- 修改git仓库的远程地址
			在我们开发的过程中,代码一般是由 git 来管理的,但有些时候我们的 git 仓库的地址可能发生了变换,比如我们使用的 gitLab 地址发生了变化,那么这个时候如何来将原项目的 git 地址进行修改 ... 
- 【STM32学习笔记】USART 硬件流控
			流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ... 
- 开关电源(DC-DC)与LDO电源的区别---纹波
			https://blog.csdn.net/edadoc2013/article/details/78435775 
- readelf
			readelf的help内容如下所示: Usage: readelf <option(s)> elf-file(s) Display information about the conte ... 
- Shooting Bricks题解
			题目传送门 以后我绝对不会一直磕着一道题磕几个小时了...感觉还是自己节奏出了问题,不知为啥感觉有点小慌... 算了,其实再回头仔细看一下这个题dp的思路还是比较好想出来的,打代码之前一定要做好足够的 ... 
- ELK 脚本自动化删除索引
			kibana有自带接口,可通过自带的API接口 通过传参来达到删除索引的目的. # 删除15天前的索引 curl -XDELETE "http://10.228.81.161:9201/pa ... 
- Code Runner for VS Code,下载量突破 3000 万!
			还记得五年前的夏天,我在巨硬写着世界上最好的语言,有时也需要带着游标卡尺写着另一门语言.然而,我对这两门语言都不熟悉,如果能在 VS Code 中方便快捷地运行各种语言,那岂不是很方便?于是,我就开发 ... 
- Java测试开发--Comparable和Comparator接口(五)
			Comparable 简介Comparable 是排序接口.若一个类实现了Comparable接口,就意味着"该类支持排序".此外,"实现Comparable接口的类的对 ... 
- springboot单元测试 JUnit5
			JUnit5简介 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 JUnit 5官方文档 作为最新版本的JUnit框架,JUnit5与之前版本的JUnit框架有很 ... 
