24.判断回文链表

1.题目描述

2.思路

前面两题都是为了这一题做准备的,思路就是双指针先找到中间节点,然后翻转后半段,然后依次对比即可

3.代码

cpp 复制代码
bool isPalindrome(struct ListNode* head) {
   if (head == NULL || head->next == NULL) {
        return true;
    }
    struct ListNode* p1 = head;
    int len = 0;
    while(p1!=NULL){
        len++;
        p1 = p1->next;
    }

    int mid = len/2;//找到后半段的首个节点
    p1 = head;//继续用p1
    while(mid>0){
        p1 = p1->next;
        mid--;
    }//此时p1指向后半段
    //开始反转后半段
    struct ListNode* pre = NULL;
    struct ListNode* cur = p1;
    struct ListNode* nextp=NULL;
    while(cur!=NULL){
        nextp = cur->next;
        cur->next = pre;
        pre = cur;
        cur=nextp;
    }
    //此时cur就是后半段反转的头节点
    //开始判断回文
    while(pre!=NULL){
        if(head->val != pre->val){
            return false;
        }
        pre = pre->next;
        head = head->next;
    }
    return true;
}
相关推荐
延凡科技11 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
皓月斯语16 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见17 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗17 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索18 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana218 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
星恒随风18 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
txzrxz18 小时前
单调队列讲解
数据结构·c++·算法·单调队列
Keven_1119 小时前
算法札记:树状数组的用途
数据结构·算法
cpp_250120 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解