C++数据结构与算法之判断一个链表是否为回文结构的方法

 更新时间:2017年05月08日 11:49:32   作者:难免有错_  
这篇文章主要介绍了C++数据结构与算法之判断一个链表是否为回文结构的方法,结合实例形式分析了回文结构并结合实例给出了C++判断回文的操作技巧,需要的朋友可以参考下

本文实例讲述了C++判断一个链表是否为回文结构的方法。分享给大家供大家参考,具体如下:

题目:

给定一个链表头节点head,请判断是否为回文结构

例如:

1->2->1 true
1->2->2->1 true
1->2->3->4->2->1 false

解题思路及代码

1、找到链表中间节点,然后将链表中间节点的右边所有节点放入一个栈中。

2、然后从链表首节点和栈顶元素一一对比,不相等则return false。

算法C++代码:

链表节点结构定义

typedef struct Node
{
  int data;
  struct Node* next;
}node, *pLinkedList;
bool isHuiWen(pLinkedList head)
{
  if (head == NULL || head->next == NULL)
    return true;
  pLinkedList right = head->next;//保存中间节点的下一个节点(若为偶数则为偏右的中间节点)
  pLinkedList cur = head;      //快指针
  while (cur->next != NULL && cur->next->next != NULL)
  {
    right = right->next;
    cur = cur->next->next;
  }
  //当链表总结点个数为奇数情况时:
  if (cur->next != NULL && cur->next->next == NULL)
    right = right->next;
  //将链表右边的节点放入一个栈中
  stack<pLinkedList>* s = new stack<pLinkedList>();
  while (right != NULL)
  {
    s->push(right);
    right = right->next;
  }
  //比较链表左右两边节点是否相等
  while (!s->empty())
  {
    if (head->next->data != s->top()->data)
      return false;
    s->pop();
    head = head->next;
  }
  return true;
}

希望本文所述对大家C++程序设计有所帮助。

相关文章

  • C语言详解如何实现堆及堆的结构与接口

    C语言详解如何实现堆及堆的结构与接口

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将详细介绍堆的结构与接口,需要的可以参考一下
    2022-04-04
  • 最小生成树算法C语言代码实例

    最小生成树算法C语言代码实例

    这篇文章主要介绍了最小生成树算法C语言代码实例,有需要的朋友可以参考一下
    2013-12-12
  • C++图文并茂分析讲解内存管理

    C++图文并茂分析讲解内存管理

    本章主要介绍C语言与C++的内存管理,以C++的内存分布作为引入,介绍C++不同于C语言的内存管理方式(new delete对比 malloc free),感兴趣的朋友来看看吧
    2022-09-09
  • C语言数据结构之单链表的实现

    C语言数据结构之单链表的实现

    链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。本文将用C语言实现单链表,需要的可以参考一下
    2022-06-06
  • C语言编写洗牌发牌程序

    C语言编写洗牌发牌程序

    这篇文章主要为大家详细介绍了C语言编写洗牌发牌程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明

    C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明

    这篇文章主要介绍了C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 基于C++实现一个简单的音乐系统

    基于C++实现一个简单的音乐系统

    C++中的Beep 函数是一个发出嗡鸣声的函数,本文将利用这个函数实现制作一个简单的声音系统。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C++实现LeetCode(78.子集合)

    C++实现LeetCode(78.子集合)

    这篇文章主要介绍了C++实现LeetCode(78.子集合),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++使用CRT库检测内存泄漏的方法详解

    C++使用CRT库检测内存泄漏的方法详解

    内存泄漏是 C/C++ 应用程序中最微妙、最难以发现的 bug,存泄漏是由于之前分配的内存未能正确解除分配而导致的, 内存泄漏的检测工具有很多,CRT库,是Visual Studio 自带的,所以我们可以开箱即用,所以下面我们就来一起学习一下如何使用CRT库检测内存泄漏
    2024-06-06
  • C语言实现顺序表基本操作汇总

    C语言实现顺序表基本操作汇总

    这篇文章主要介绍了C语言实现顺序表基本操作汇总,对学习数据结构的朋友有一定的借鉴价值,需要的朋友可以参考下
    2014-07-07

最新评论