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

作者:难免有错_ 时间:2023-04-15 18:46:27 

本文实例讲述了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++,数据结构,算法,链表
0
投稿

猜你喜欢

  • 深入探究Java线程的状态与生命周期

    2021-10-01 17:44:10
  • 亲手教你SpringBoot中的多数据源集成问题

    2023-08-19 02:57:20
  • C#实现简单的聊天窗体

    2022-11-09 03:25:13
  • 详解C# Socket简单例子(服务器与客户端通信)

    2022-01-02 03:12:49
  • Java基础之从HelloWorld到面向对象

    2022-11-23 11:55:06
  • java课程设计做一个多人聊天室(socket+多线程)

    2022-10-31 08:11:54
  • C#4.0新特性之协变与逆变实例分析

    2022-02-18 00:17:28
  • Android之ArcSlidingHelper制作圆弧滑动效果

    2021-07-23 03:10:24
  • 使用 C# 下载文件的多种方法小结

    2023-11-08 06:59:37
  • C#装箱和拆箱的原理介绍

    2022-06-18 02:33:17
  • Springboot打包部署修改配置文件的方法

    2022-12-20 11:59:58
  • 深入理解JAVA基础类库中对象Object类

    2023-07-26 12:24:10
  • Java中BigDecimal的加减乘除、比较大小与使用注意事项

    2022-02-17 21:24:09
  • 详解xamarin Android 实现ListView万能适配器

    2022-11-26 02:12:33
  • Spring+SpringMVC+MyBatis深入学习及搭建(一)之MyBatis的基础知识

    2021-09-27 15:12:59
  • AndroidStudio实现微信界面设计

    2022-09-16 22:45:40
  • Android 实现永久保存数据的方法详解

    2023-06-23 22:13:23
  • springboot乱码问题解决方案

    2022-03-22 21:32:38
  • SpringBoot使用WebSocket的方法实例详解

    2022-12-26 03:19:25
  • C#控制台实现飞行棋小游戏

    2023-04-27 05:13:43
  • asp之家 软件编程 m.aspxhome.com