您的位置:首页 > 其它

链表的回文结构

2016-03-20 18:08 288 查看
题目描述

对于一个链表,请设计一个时间复杂度为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;

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: