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

相关推荐
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
weilx12345 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛5 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
m0_547486665 天前
《数据结构教程》全套 PPT课件2026
数据结构
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光5 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·5 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁5 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven5 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码5 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎