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