牛客网数据结构,链表的回文结构(C语言)

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

在这里插入图片描述

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
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;
           }
        
    }
     
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章