验证回文串(单向链表、顺序表)

本文探讨如何验证一个字符串是否为回文串,通过两种方法进行阐述:一是使用单链表,虽然时间复杂度较高,为O(n^2),但详细解释了如何操作;二是利用顺序表,利用其随机访问特性,降低时间复杂度至O(n),提高效率。
摘要由CSDN通过智能技术生成

验证回文串

题目:给定一个字符串,验证它是否是回文串。

例如:
    ​​“abccba”  ​TRUE

​  ​  ​“abcddefa”  FALSE

在这里我使用了两种方法来解决这个问题,第一种是单链表,第二种是用顺序表。

单链表

  ​在用单链表解决这个问题的时候,由于要访问一个节点的前一个节点,随之而然的就想到了使用双向链表的方法,一个指向先驱节点,一个指向后继节点,这样访问就会十分方便。可是,使用单向链表来解决这个问题就会繁琐很多。基本上就把一个链表分成了两个链表,一个指针指向前面,从前往后遍历;一个指针指向尾部,也是从前往后遍历,但是尾部递减(往前移动)。
  ​使用单链表实现,资源消耗是很大的。用了两重循环,时间复杂度是(n/2)*n,为O(n^2);空间复杂度为0。所以我觉得使用单链表来做不合适,用双向链表来做效率会提高很多。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ElemType char

typedef struct LNode
{
   
	ElemType data;
	struct LNode *next;
}LinkList;

LinkList* Create()
{
   
	LinkList *L;
	LinkList *s;
	ElemType e;
	L=(LinkList*)malloc(sizeof(LinkList));
	L->next=NULL;
	printf("请输入字符串:");
	while(1)
	{
   
		scanf("%c",&e);
		if(e!='1')
		{
   
			s=(LinkList*)malloc(sizeof(LinkList));
			s->data=e;
			s->next=L->next;
			L->next=s;
		}
		else
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值