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 小时前
Dispatcher模块剖析
linux·c++
依然鸣2 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
库玛西4 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
liulilittle4 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
qeen875 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
Augustzero5 小时前
为什么线程不能说睡就睡?看懂等待与唤醒机制
c++·后端
程序员与背包客_CoderZ5 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
冻柠檬飞冰走茶6 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
wangchen_06 小时前
C++正则表达式
开发语言·c++·正则表达式