当前位置: 首页 > article >正文

判断链表的全部n个字符是否中心对称。

设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型。试设计算法判断链表的全部n个字符是否中心对称。例如XYX,XYYX是中心对称。

思想:先求链表长度,然后将前n/2个元素入栈,将栈顶元素与后n/2个元素进行比较,如果栈为空则对称。链表为n个元素时,去掉中间元素再进行比较。

代码:

typedef struct{
	char *data;
	int top;
}SqStack;
 //求带头结点链表的长度 
int length(LinkList L){
	int len=0;
	L=L->next;
	while(L!=NULL){
		L=L->next;
		len++;
	} 
	return len;
}
//判断带头结点的链表是否对称 
bool issymmetry(LinkList L){
	int len=length(L);//求链表长度
	if(length==0||length==1) return true;
	
	//初始化栈  
	SqStack stack;
	stack.data=(char*)malloc(sizeof(char)*(length/2));
	stack.top=-1;
	
	// 入栈
	LNode *p=L->next;
	for(int i=0;i<length/2;i++){
		stack.data[++stack.top]=p->data;
		p=p->next;
	} 
	
	if(length%2==1) p=p->next;//舍弃中间元素
	
	//出栈进行比较
	while(stack.top > -1){
		if(stack.data[stack.top]==p->data){
			stack.top--;
			p=p->next;
		}else{//不对称 
			break;
		}
	} 
	return stack.top==-1;//栈空,则说明对称 
}

时间复杂度O(n);空间复杂度O(1)


http://www.kler.cn/a/306512.html

相关文章:

  • win11 新建一个批处理,双击查看本机的IP地址
  • Leecode热题100-35.搜索插入位置
  • 从社交媒体到元宇宙:Facebook未来发展新方向
  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • golang如何实现sse
  • 【金融风控】特征评估与筛选详解
  • Dbt基本概念与快速入门
  • office 2021安装教程
  • C - Make Isomorphic题解
  • Java 类和对象-小结(重要)
  • 基于STM32设计的智能货架(华为云IOT)(225)
  • VUE
  • 跨平台集成:在 AI、微服务和 Azure 云之间实现无缝工作流
  • 深入理解算法效率:时间复杂度与空间复杂度
  • Spark_natural_join
  • 828华为云征文 | 华为云Flexusx与Docker技术融合,打造个性化WizNote服务
  • 深入理解中比较两个字符串差异的方法”或“高效比对字符串:diff-match-patch:c++实战指南
  • c++面向对象
  • 栈OJ题——用栈实现队列
  • 嵌入式初学-C语言-数据结构--七
  • 【linux基础】linux中的开发工具(4)--调试器gdb的使用
  • 问题及解决方案汇总
  • 结构体内存对齐
  • 【算法】动态规划—最长公共子序列
  • HTML+CSS - 网页布局之多列布局定位
  • 网络安全应急响应概述