C语言/数据结构——(链表的回文结构)

一.前言

今天在牛客网上刷到了一道链表题------链表的回文结构https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?,巧合的是它的解题思路恰好是我们一起分享过两道链表题的汇总。这两道题分别是反转链表和链表的中间节点。废话不多数,让我们直接进入今天的正文环节吧。

二.正文

1.1题目描述

1.2题目分析

对于这道题,我们的思路是先找到链表的中间节点,然后将中间节点及之后的链表进行逆置,这样就可以得到两个链表的头节点。并让这两个链表的元素依次比较大小,如果元素依次相同,则返回true,否者返回false。

就比如:1->2->2->1

对于反转链表和找到中间节点可以看我写的文章。下面是对应其链接:

反转链表:https://blog.csdn.net/yiqingaa/article/details/138376042?

查找中间节点:https://leetcode.cn/problems/middle-of-the-linked-list

1.3代码实现

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
 typedef struct ListNode ListNode;
class PalindromeList {
public:
ListNode* middleNode(struct ListNode* head) 
{
    ListNode* slow;
    ListNode* fast;
    fast=slow=head;
    while((fast!=NULL)&&(fast->next!=NULL))
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}
typedef struct ListNode ListNode;
ListNode* ReverseList( ListNode* head)
{
// if(head==NULL)
  //  return NULL;
    ListNode*pcur,*prev,*pnext;
    ListNode* phead=(ListNode*)malloc(sizeof(ListNode));
    phead->next=head;
    pcur=head;prev=phead;pnext=pcur->next;
    while(pcur!=NULL)
    {
        pcur->next=prev;
        prev=pcur;
        pcur=pnext;
        if(pnext!=NULL)
        pnext=pnext->next;
    }
    head->next=NULL;
    free(phead);
    phead=NULL;
    return prev;
}
    bool chkPalindrome(ListNode* A) {
        // write code here
ListNode* mid=middleNode(A);
ListNode* remid= ReverseList(mid);
while(remid&&A)
{
    if(A->val!=remid->val)
     return false;
     else
     {
        A=A->next;
        remid=remid->next;
     }

}
return true;
    } 
};

值得注意的是,以上代码是在牛客网上运行的。

三.结言

今天的题目就分享到这了,帅哥美女们,我们下次再见喽,拜拜~

相关推荐
特种加菲猫5 分钟前
初阶数据结构之栈的实现
开发语言·数据结构·笔记
江-小北7 分钟前
Java基础面试题04:Iterator 和 ListIterator 的区别是什么?
java·开发语言
鸽鸽程序猿21 分钟前
【前端】javaScript
开发语言·前端·javascript
小林熬夜学编程25 分钟前
【Linux系统编程】第五十弹---构建高效单例模式线程池、详解线程安全与可重入性、解析死锁与避免策略,以及STL与智能指针的线程安全性探究
linux·运维·服务器·c语言·c++·安全·单例模式
kylin王国28 分钟前
R语言p值矫正整的方法
开发语言·r语言·p值
bingw011432 分钟前
华为机试HJ62 查找输入整数二进制中1的个数
数据结构·算法·华为
我qq不是4515165233 分钟前
C语言指针作业
c语言
苏言の狗35 分钟前
小R的二叉树探险 | 模拟
c语言·数据结构·算法·宽度优先
加载中loading...36 分钟前
C/C++实现tcp客户端和服务端的实现(从零开始写自己的高性能服务器)
linux·运维·服务器·c语言·网络
凯子坚持 c1 小时前
C++之二叉搜索树:高效与美的极致平衡
开发语言·c++