对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
{
ListNode* copyA = NULL;
ListNode* cur = A;
while(cur != NULL)
{
ListNode* copyCur = (ListNode*)malloc(sizeof(ListNode));
copyCur -> val = cur->val;
copyCur->next =copyA;
copyA =copyCur;
cur = cur->next;
}
cur = A;
ListNode* copyCur = copyA;
bool ret = true;
while(cur !=NULL)
{
if(cur->val != copyCur->val)
{
ret =false;
break;
}
cur = cur->next;
copyCur = copyCur->next;
}
copyCur = copyA;
while(copyCur)
{
ListNode* next = copyCur->next;
free(copyCur);
copyCur = next;
}
return ret;
}
}
};