题目简介
牛客网
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
// write code here
if(A == NULL && A->next == NULL)
return true;
ListNode* fast = A;
ListNode* slow = A;
//找中间结点
while(fast)
{
slow = slow->next;
fast = slow->next;
}
ListNode* cur = slow->next;
ListNode* head = slow;
//反转后面节点
while(cur)
{
ListNode* prev = cur->next;
cur->next = head;
head->next = NULL;
head = cur;
cur = prev;
}
//比较
while(head)
{
if(head->val != A->val)
{
return false;
}
head = head->next;
A = A->next;
}
return true;
}
};
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
// write code here
int a[900];
int n = 0;
struct ListNode* cur = A;
while(cur)
{
a[n++] = cur->val;
cur = cur->next;
}
int left = 0, right = n-1;
while(left < right)
{
if(a[left] != a[right])
return false;
++left;
--right;
}
return true;
}
};
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* newhead = NULL;
struct ListNode* cur = head;
while(cur)
{
struct ListNode* next = cur->next;
cur->next = newhead;
newhead = cur;
cur = next;
}
return newhead;
}
bool chkPalindrome(ListNode* A) {
int n = 0;
struct ListNode* cur = A;
while(cur)
{
cur = cur->next;
++n;
}
cur = A;
int mid = n/2;
while(mid--)
{
cur = cur->next;
}
struct ListNode* head1 = A;
struct ListNode* head2 = reverseList(cur);
mid = n/2;
while(mid--)
{
if(head1->val == head2->val)
{
head1 = head1->next;
head2 = head2->next;
}
else
{
return false;
}
}
return true;
}
};