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等技术内容,点击立即学习:链接

相关推荐
曦樂~21 分钟前
Cpp面筋
c语言·c++
道尔柯南31 分钟前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
十二4 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
D e re k ZH6 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
zjxtxdy8 小时前
C++面向对象程序开发-类与对象
开发语言·c++
東隅已逝,桑榆非晚9 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
qq_4069810310 小时前
c++拷贝构造函数
开发语言·c++
careathers11 小时前
【数据结构】基于比较的排序算法 - 交换排序
数据结构·算法·排序算法
H.莓飛12 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla12 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法