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;
}
相关推荐
明月_清风4 小时前
从二叉树到 B+ 树:一文搞懂工程中「树」的演化之道
数据结构·算法·go
渡我白衣4 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
血小板要健康5 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
wuyk5559 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
-dzk-9 小时前
【链表】LC 138.随机链表的复制
数据结构·链表
洋不写bug10 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
白狐_79811 小时前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
heima201611 小时前
长期复盘:拼团活动链接开发公司的行业现状与困境洞察
链表
mmmmath_312 小时前
面试题 02.07. 链表相交
算法·链表
sylviiiiiia13 小时前
Leetcode hot100 多数元素/相交链表/反转链表
算法·leetcode·链表