力扣-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) 空间复杂度

相关推荐
GreenTea2 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
fqq33 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
半夏微凉半夏殇5 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565125 小时前
数学之美探究
算法
oier_Asad.Chen6 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
leisoo80977 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_176810 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk55510 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴10 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆10 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill