每日一练之链表的回文结构

题目描述:

方法一:

找到链表的中间结点。

图片解疑:

从中间结点开始把后面的链表反转。注:详细请看附录链接

图片解疑:

判断头结点的值和尾结点的值是否一样。

代码实例:

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
#include <cstddef>
#include<stdio.h>
ListNode* middlenode(ListNode* head)
{
    ListNode* fast,*slow;//快慢指针
    fast=slow=head;
    while(fast && fast->next)
    {
        slow=slow->next;//slow走一步
        fast=fast->next->next;//fast走两步
    }
    return slow;//返回中间结点
}
ListNode* reverseList(ListNode* head)
{
    ListNode* n1,*n2,*n3;
    n1=NULL,n2=head,n3=head->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
        {
            n3=n3->next;
        }
    }
    return n1;
}
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        //找中间结点
        ListNode* mid=middlenode(A);
        //反转链表
        ListNode* right=reverseList(mid);//返回的是尾结点
        //遍历和判断
        ListNode* left=A;
        while(right)
        {
            if(left->val != right->val)
            {
                return false;
            }
            left=left->next;
            right=right->next;
        }
        return true;
    }
};

方法二:

创建数组把链表的val值存储进去。

在数组中判断是否为回文结构。

代码实例:

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        int arr[900]={0};
        ListNode* newnode=A;
        int i=0;
        while(newnode)
        {
            arr[i++]=newnode->val;
            newnode=newnode->next;
        }
        int left=0;
        int right=i-1;
        while(left<right)
        {
            if(arr[left] != arr[right])
            {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
};

完!!

附录:每日一练之反转链表-CSDN博客

相关推荐
历程里程碑17 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
sin_hielo17 小时前
leetcode 1653
数据结构·算法·leetcode
李日灐17 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
熬夜有啥好17 小时前
数据结构——排序与查找
数据结构
YuTaoShao17 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法二)排序 + 二分查找
数据结构·算法·leetcode
wangluoqi17 小时前
26.2.6练习总结
数据结构·算法
Yvonne爱编码17 小时前
链表高频 6 题精讲 | 从入门到熟练掌握链表操作
java·数据结构·链表
铉铉这波能秀18 小时前
LeetCode Hot100 中 enumerate 函数的妙用(2026.2月版)
数据结构·python·算法·leetcode·职场和发展·开发
墨有66618 小时前
哈希表从入门到实现,一篇吃透!
数据结构·算法·哈希算法
啊阿狸不会拉杆18 小时前
《机器学习导论》第 7 章-聚类
数据结构·人工智能·python·算法·机器学习·数据挖掘·聚类