单链表---回文结构

判断某一个单链表是否是回文结构,是返回true、不是返回false。

所谓的回文结构,就是类似对称结构:

对于奇数与偶数个结点均是如此。

那么就有思路:①找到链表的中间结点②逆置后半部分或前半部分③比较两者

①找中间结点:

cpp 复制代码
    ListNode* slow , *fast;
    fast = slow = head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
    }
    ListNode* mid = slow;

②逆置后半部分

可以使用三指针的方式进行逆置,也可以如上图所示创建一个指针变量midhead来头插。

cpp 复制代码
    //三指针逆置
    ListNode* mid = slow;
    while(mid->next)
    {
        ListNode* midnext = mid->next;
        ListNode* midnextnext = midnext->next;
        midnext->next = mid;
        mid = midnext;
    }
cpp 复制代码
    //逆置mid后的链表,采用头插
    ListNode* midhead = NULL;
    while(mid)
    {
        ListNode* midnext = mid->next;
        mid->next = midhead;
        midhead = mid;
        mid = midnext;
    }

③遍历比较两个链表同位置处的值

cpp 复制代码
    while(midhead&&head)
    {
        if(midhead->val!=head->val)
            return false;
        midhead=midhead->next;
        head=head->next;
    }
    return true;

整体代码如下:

cpp 复制代码
public:
    bool chkPalindrome(ListNode* head) {
        ListNode* slow , *fast;
        fast = slow = head;
        while(fast&&fast->next)
        {
            fast=fast->next->next;
            slow=slow->next;
        }
        ListNode* mid = slow;
        while(mid->next)
        {
            ListNode* midnext = mid->next;
            ListNode* midnextnext = midnext->next;
            midnext->next = mid;
            mid = midnext;
        }
        while(mid&&head)
        {
            if(mid->val!=head->val)
                return false;
            mid=mid->next;
            head=head->next;
        }
        return true;
    }
};
相关推荐
Vesan,22 分钟前
无人机开发分享——基于行为树的无人机集群机载自主决策算法框架搭建及开发
c++·算法·决策树·无人机
胤祥矢量商铺34 分钟前
菜鸟笔记007 [...c(e), ...d(i)]数组的新用法
c语言·开发语言·javascript·笔记·illustrator插件
泽虞1 小时前
C语言深度语法掌握笔记:底层机制,高级概念
java·c语言·笔记
爱coding的橙子1 小时前
每日算法刷题Day58:8.7:leetcode 单调栈5道题,用时2h
算法·leetcode·职场和发展
董莉影1 小时前
学习嵌入式第二十二天
数据结构·学习·算法·链表
尘心不灭2 小时前
Spring Boot 项目代码笔记
spring boot·笔记·后端
我爱学嵌入式2 小时前
C 语言第 17 天学习笔记:从二级指针到内存布局的进阶指南
c语言·笔记·学习
Lukeding2 小时前
Magnetic-UI源码解析
算法
chirrupy_hamal2 小时前
排序算法详解
算法
落羽的落羽2 小时前
【C++】哈希表原理与实现详解
数据结构·c++