【leetcode每日一题】234.Palindrome Linked List
2015-09-01 12:32
309 查看
题目:
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?
解析:
方法一:如果不考虑空间复杂度,则可以直接用vector来做。将所有节点压入vector,然后对比vector前半部分和后半部分。代码如下:
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?
解析:
方法一:如果不考虑空间复杂度,则可以直接用vector来做。将所有节点压入vector,然后对比vector前半部分和后半部分。代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool isPalindrome(ListNode* head) { vector<int> result; while(head!=NULL) { result.push_back(head->val); head=head->next; } for(int i=0,j=result.size()-1;i<j;i++,j--) { if(result[i]!=result[j]) return false; } return true; } };方法二:如果不占用额外的空间,我们可以将链表的后半部分逆序,然后再比较两部分是否相等。代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverse(ListNode* head) { if(head==NULL || head->next==NULL) { return head; } ListNode *curNode=head,*nextNode=head,*temp; while(nextNode!=NULL) { temp=nextNode->next; nextNode->next=curNode; curNode=nextNode; nextNode=temp; } head->next=NULL; head=curNode; return head; } bool isPalindrome(ListNode* head) { ListNode *fast=head,*slow=head,*tail; while(fast!=NULL && fast->next!=NULL) { tail=slow; fast=fast->next->next; slow=slow->next; } tail->next=NULL; ListNode *result=reverse(slow); ListNode *first=head,*second=result; while(first!=NULL) { if(first->val!=second->val) { return false; } first=first->next; second=second->next; } return true; } };
相关文章推荐
- hdu oj 1520 Anniversary party(树形dp入门)
- mysql-安装之cmake的编译安装(mysql 5.6以后需要cmake编译安装)
- swift总结1
- mysql-安装之CAMKE编译安装
- 常用正则表达式
- mac ngrok使用
- 解决eclipse+MAVEN提示One or more constraints have not been satisfied.的问题
- 【转载】我的Lean & Agile(精简和敏捷)经历
- Debian root用户无法远程登录
- CUDA入门的学习资料
- JNI编程指南-第十一章 JNI设计思想概述
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- mysql utc 时间格式化
- Fiddler初步---认识Fiddler
- js实现具有高亮显示效果的多级菜单代码
- NYOJ 116 士兵杀敌(二)(线段树区间求和+单点更新)
- 自动任务中时间拼法
- JNI编程指南-第十章 使用JNI时容易出错的地方
- GIT push 遇到 access denied问题
- 数据结构学习之路-第二章:带头结点的线性链表