《手撕链表题系列-7》链表的回文结构

简介: 本系列主要讲解链表的经典题注:划重点!!必考~

前言


本系列主要讲解链表的经典题

注:划重点!!必考~


链表分割


牛客链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)


题目描述:


对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。


给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。


解题思路:


  1. 这里我们先找到中间结点(使用快慢指针法)
  2. 快指针每次走两个结点的位置,慢指针每次走一个结点的位置
  3. 快指针走到结束位置时,慢指针恰到中间位置
  4. 从中间结点开始对接下来每个结点进行改变结点方向
  5. 最后对两个头结点开始逐个遍历接下来的结点,直到相遇


图示:


30.png


31.png

参考代码:


/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        //快慢指针找到中间结点
        struct ListNode*fast=A,*slow=A;
        while(fast&&fast->next)
        {
            fast=fast->next->next;
            slow=slow->next;
        }
        struct ListNode*cur=slow;
        //两个指针用来逆转节点方向
        struct ListNode*prev=NULL,*next;
        while(cur)
        {
            struct ListNode*Next=cur->next;
            cur->next=prev;
            prev=cur;
            cur=Next;
        }
        //遍历比较
        struct ListNode*cur1=A,*cur2=prev;
        while(cur1&&cur2)
        {
            if(cur1->val==cur2->val)
            {
                cur1=cur1->next;
                cur2=cur2->next;
            }
            else
                return false;
        }
        return true;
    }
};

结果:

32.png



相关文章
|
4天前
|
C++
数据结构01-线性结构-链表栈队列-栈篇
数据结构01-线性结构-链表栈队列-栈篇
LeetCode | 234. 回文链表
LeetCode | 234. 回文链表
|
4天前
|
存储 C语言
数据结构基础:双链表结构、实现
数据结构基础:双链表结构、实现
|
4天前
|
存储 算法 C语言
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
42 0
|
4天前
|
算法
链表的回文结构
链表的回文结构
|
4天前
|
Java Go C++
Golang每日一练(leetDay0086) 回文链表、删除链表节点
Golang每日一练(leetDay0086) 回文链表、删除链表节点
23 0
Golang每日一练(leetDay0086) 回文链表、删除链表节点
|
4天前
|
Python Java Go
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表
34 0
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表
|
4天前
|
C++ Python Java
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
548 0
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
|
4天前
每日一题——回文链表
每日一题——回文链表
|
4天前
牛客网:OR36 链表的回文结构
牛客网:OR36 链表的回文结构
13 0
牛客网:OR36 链表的回文结构