力扣-234.回文链表

题目描述

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

cpp 复制代码
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        //快慢指针找到中间结点p1(偶数个结点停在中左)
        ListNode* p1 = head;
        ListNode* p2 = head->next;
        if(p2==nullptr)
            return true;
        while (p2!=nullptr&&p2->next!= nullptr){
            p1=p1->next;
            p2=p2->next->next;
        }
        //后半段头插法逆置
        p2=p1->next;
        p1->next=nullptr;
        while (p2!= nullptr){
            ListNode* temp = p2;
            p2=p2->next;
            temp->next=p1->next;
            p1->next=temp;
        }
        //比较前半段与后半段是否重合
        p2=head;
        p1=p1->next;
        while (p1!= nullptr){
            if(p1->val!=p2->val)
                return false;
            p1=p1->next;
            p2=p2->next;
        }
        return true;
    }
};

小结: 这种做法思路比较清晰,而且可以满足O(n) 时间复杂度和 O(1) 空间复杂度

相关推荐
hanlin033 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
All for pursuit.3 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
碧海银沙音频科技研究院5 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
通问AI6 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo6236 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
Scintilla_y6 小时前
DAY2 滑动窗口
算法·leetcode·散列表
lvwangshu6 小时前
笛卡尔树
算法·图论
026d236 小时前
状态信号只知“其然”不知“其所以然”:变工况机械故障诊断的物理盲区
算法
姜鱼问生6 小时前
备份和服务器在同一台机器上,等于没备份
算法·架构
姜鱼问生7 小时前
别再 chmod 777 了,用 ACL 给它开一扇窗
后端·算法·架构