牛客网数据结构,链表的回文结构(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;
           }
        
    }
     
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值