leetcode 234.回文链表

官方题解给出三个方法。

方法一为利用一个二维数组记录值,然后遍历数组去判断是否回文。时间代价和空间代价都为O(n)。

实现代码如下

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        vector<int> tmp;
        ListNode* curNode=head;
        while (curNode!= nullptr){
            tmp.push_back(curNode->val);
            curNode=curNode->next;
        }
        int len =tmp.size();
        for (int i = 0; i < len/2; ++i) {
            if(tmp[i]!=tmp[len-1-i])return false;
        }
        return true;
    }
};
复制代码

 

方法二递归法。

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* preNode;
    bool checkPalind(ListNode* curNode){
        if(curNode!= nullptr){
            if(!checkPalind(curNode->next))return false;
            if(curNode->val!=preNode->val)return false;
            preNode=preNode->next;
        }
        return true;
    }
    bool isPalindrome(ListNode* head) {
        preNode=head;
        return checkPalind(head);
    }
};
复制代码

 

方法三,寻找链表的中间节点(通过快慢指针实现,慢指针走一步,快指针走两步,最后慢指针指向中间节点),将链表后半部分反转。最后比较前半段和后半段节点的值是否相同即可。这样空间代价降为O(1)。

如果需要维持链表结构,那返回结果前需要把链表后半段再次反转。

posted @   布羽  阅读(137)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示