24 回文链表

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

示例 1:

复制代码
输入:head = [1,2,2,1]
输出:true

示例 2:

复制代码
输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105]
  • 0 <= Node.val <= 9

进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

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

示例 1:

复制代码
输入:head = [1,2,2,1]
输出:true

示例 2:

复制代码
输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105]
  • 0 <= Node.val <= 9

进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

思路1:将链表的数填充到数组中,然后用双指针判断回文
cpp 复制代码
    bool isPalindrome(ListNode* head) {
    if(!head) return false;
    vector<int> res;
    ListNode* pMove=head;
    while(pMove){
        res.push_back(pMove->val);
        pMove=pMove->next;
    }
    int size=res.size();
    int left=0,right=size-1;
    while(right>=left){
        if(res[left++]!=res[right--]) return false;
    }
    
    return true;
}
思路2:递归链表

1、定义一个全局的链表节点指针,指向头节点,pMove

2、递归链表,先让头节点指针frontNode走到尾节点

3、尾节点pMove和frontNode对比,假如不相等,直接返回false

4、如果有一个节点返回false,全部节点都返回false

5、如果返回true,进入下一层继续比较,直到比较全部节点,返回true;

cpp 复制代码
class Solution {
public:
ListNode* pMove;
bool dromeCycle(ListNode* tail){
    if(!tail) return true;
    bool ret=dromeCycle(tail->next);
    if(!ret) return false;
    else{
        if(pMove->val!=tail->val) return false;
        pMove=pMove->next;
    }
    return true;
}

bool isPalindrome(ListNode* head) {
    if(!head) return false;
    pMove=head;
    
    return dromeCycle(head);
 } 
};

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

相关推荐
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt
无小道2 小时前
C/C++——atomic小记
c++·cas·无锁
千谦阙听10 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
weixin_3077791310 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN11 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
雾里看山11 小时前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
明月_清风13 小时前
从二叉树到 B+ 树:一文搞懂工程中「树」的演化之道
数据结构·算法·go
渡我白衣13 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
如意猴13 小时前
【C++】001--C++入门(1)
开发语言·c++
hetao173383713 小时前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法