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;
}
相关推荐
夏乌_Wx27 分钟前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
minji...1 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
游乐码2 小时前
C#Queue
数据结构·游戏·c#
汀、人工智能3 小时前
[特殊字符] 第67课:跳跃游戏II
数据结构·算法·数据库架构·图论·bfs·跳跃游戏ii
手握风云-4 小时前
优选算法的层序之径:队列专题
数据结构·算法·leetcode
比昨天多敲两行4 小时前
C++ 哈希表
数据结构·哈希算法·散列表
历程里程碑4 小时前
Protobuf总结
大数据·数据结构·elasticsearch·链表·搜索引擎
lg_cool_4 小时前
Python 框架之py_trees
开发语言·数据结构·python
曹牧4 小时前
svn: svn relocate ‌之externals‌
数据结构·svn