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;
    } 
};

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

三.结言

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

相关推荐
dr_yingli6 分钟前
fMRI(3-1)报告(个体化报告)生成器说明
开发语言·matlab
hrhcode6 分钟前
【java工程师快速上手go】一.Go语言基础
java·开发语言·golang
yashuk8 分钟前
C语言 vs. C++ ,哪个更适合初学者?
c语言·c++·面向对象编程·初学者·学习路径
nianniannnn20 分钟前
力扣206.反转链表 92.反转链表II
算法·leetcode·链表
飞Link29 分钟前
【AI大模型实战】万字长文肝透大语言模型(LLM):从底层原理解析到企业级Python项目落地
开发语言·人工智能·python·语言模型·自然语言处理
妙蛙种子31130 分钟前
【Java设计模式 | 创建者模式】 原型模式
java·开发语言·后端·设计模式·原型模式
泛凡(Linyongui)33 分钟前
PY32F002B实践之四--宠物腹背理疗仪项目踩坑及项目总结复盘
c语言·keil·32位单片机·腹背理疗仪项目实践·普苒py32
LlNingyu35 分钟前
Go 实现无锁环形队列:面向多生产者多消费者的高性能 MPMC 设计
开发语言·golang·队列·mpmc·数据通道
旖-旎35 分钟前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
Lyyaoo.37 分钟前
【JAVA基础面经】线程的状态
java·开发语言