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语言中输出空格的五种方法

    在C语言中,输出空格可以通过使用 printf 函数来实现,可以直接在字符串中包含空格,或者使用转义字符来控制格式,本文给大家介绍了几种常见的输出空格的方法,需要的朋友可以参考下
    2024-08-08
  • C语言中几种常量的认识和理解

    C语言中几种常量的认识和理解

    这篇文章主要为大家介绍了C语言常量的认识和理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • C++关于指针,继承和多态介绍

    C++关于指针,继承和多态介绍

    大家好,本篇文章主要讲的是C++关于指针,继承和多态介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C语言进程程序替换的实现详解

    C语言进程程序替换的实现详解

    为什么要进程替换?因为父进程创建出来的子进程和父进程拥有相同的代码段,所以,子进程看到的代码和父进程是一样的。当我们想要让子进程执行不同的程序时候,就需要让子进程调用进程程序替换的接口,从而让子进程执行不一样的代码
    2022-08-08
  • C语言中判断两数组中是否有相同的元素

    C语言中判断两数组中是否有相同的元素

    下面是我在做IF语句练习时遇到的一个练习题,想要整理在博客上判断两个数组中是否有相同的元素,需要的朋友可以参考下
    2019-10-10
  • C++ 手撸简易服务器

    C++ 手撸简易服务器

    本文主要介绍了C++ 手撸简易服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 浅谈C语言的字符串分割

    浅谈C语言的字符串分割

    下面小编就为大家带来一篇浅谈C语言的字符串分割。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 基于C++的拼多多算法在线笔试题示例

    基于C++的拼多多算法在线笔试题示例

    这篇文章主要介绍了基于C++的拼多多算法在线笔试题,列举了四个拼多多的算法笔试题,包括分治法、大数相乘、贪心算法以及迷宫问题,需要的朋友可以参考下
    2017-08-08
  • C/C++实现的MD5哈希校验的示例代码

    C/C++实现的MD5哈希校验的示例代码

    MD5算法是一种广泛使用的 Hash 算法,常用于确保信息传输的完整性与一致性,本文主要介绍了C/C++实现的MD5哈希校验的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • C语言非递归后序遍历二叉树

    C语言非递归后序遍历二叉树

    这篇文章主要为大家详细介绍了C语言非递归后序遍历二叉树,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论