链表的回文结构
2016-03-20 18:08
288 查看
题目描述
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class PalindromeList { public: bool chkPalindrome(ListNode* A) { ListNode* man=A; ListNode* kuai=A; ListNode* list1=A; bool isOdd; while(true){ if(kuai->next==NULL){ isOdd=true; break; } if(kuai->next->next==NULL){ isOdd=false; break; } kuai=kuai->next->next; man=man->next; } //reverse ListNode* index=man->next; ListNode* list2=index; while(index!=NULL){ ListNode* temp=index->next; index->next=list2; list2=index; index=temp; } if(isOdd){ ListNode* tail=A; ListNode* head=list2; while(true){ if(tail->val!=head->val){ return false; } else{ if(tail->next==man){ return true; } tail=tail->next; head=head->next; } } } else{ ListNode* tail=A; ListNode* head=list2; while(true){ if(tail->val!=head->val){ return false; } else{ if(tail==man){ return true; } tail=tail->next; head=head->next; } } } return true; } };
相关文章推荐
- ACM常用算法
- 上传base64编码文件
- HTTP请求和JSON解析与组装
- [转载]c++常用字符串操作函数
- 学习进度03
- ok6410的LCD裸机范例
- java实现map和object互转的三种方法
- CUDA 内置变量
- HDFS 小文件处理——应用程序实现
- 0320-复利实验代码改进
- 一个很好的网站 www.atwop.com
- 关于combox只显示一条下拉列表中的内容的问题
- Linux内核分析之四——系统调用的工作机制
- Hibernate逍遥游记-第10章 映射继承关系-003继承关系树中的每个类对应一个表(joined-subclass)
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(一)
- 谈谈我的个人追求
- genymotion+VirtualBox创建android模拟器
- HTML5 Canvas画布,画出直角三角形
- minecraft生存指南
- C常用字符串处理函数