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

相关推荐
从小白到软工33 分钟前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん36 分钟前
非类型模板参数的特化与偏特化
java·数据结构·算法
无忧.芙桃1 小时前
C++语言原理与实践(十三):stack、queue 和 priority_queue的介绍与使用
开发语言·c++·栈·队列
haluhalu.1 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
垆边人似月.1 小时前
幻兽防御战(贪心算法)
数据结构·算法
TDTC_XQ2 小时前
模板类的写法
linux·c++
BeiGuTing_code2 小时前
C链表基础(二)有视频模拟!!!
c语言·链表·音视频
CCCCCCCCharlie3 小时前
深入解析I/O底层:文件描述符与缓冲区真相
linux·开发语言·c++·算法
自信150413057593 小时前
重生之从0开始学习c++之string(下)
c++·学习·stl
Cccp.1233 小时前
【leetcode】(十三)大数据处理
数据结构·算法·leetcode