06 | 链表(上):用单链表的方式判断回文字符串

本文介绍了如何使用单链表数据结构和快慢指针来判断一个字符串是否为回文。通过创建单链表、翻转链表前半部分并进行比较,详细阐述了快慢指针在寻找链表中点及节省遍历时间上的作用。同时,文章借助手绘图形辅助理解链表操作和代码之间的关系。
摘要由CSDN通过智能技术生成

 总结

1.熟悉掌握了单链表的数据结构

2.熟悉了如何创建一个单链表

3.了解快慢指针的妙用:用不同的速度在链表中移动,在移动的同时把前半部分链表翻转,这样就可以在遍历完成之后得到两个一分为二的锻炼表,下一步只需要进行挨个比较,就可以判断是否为回文字符串。

4.这里面快慢指针的最主要的用处在于寻找到链表的中点。利用快慢指针可以节省遍历的时间。

4.用手绘图形的方法了解链表操作和代码之间的关系

 

代码段:

#include "stdafx.h"
#include <string>
#include <stdio.h>

typedef struct sData
{
private:
	char m_chData;

public:
	void SetValue(const char value) { m_chData = value; }
	char GetValue() { return m_chData; }

	bool operator== (const sData &lhs)
	{
		if (lhs.m_chData == this->m_chData)
		{
			return true;
		}

		return false;
	}

	bool operator!= (const sData &lhs)
	{
		if (lhs.m_chData != this->m_chData)
		{
			return true;
		}

		return false;
	}

}Data, * pData;

struct node
{
	D
在 C 语言中,使用链栈(也称为单向链表)来判断一个字符串是否是回文串可以分为以下几个步骤: 1. **创建链栈结构**:首先,我们需要定义一个节点结构,包含字符和指向下一个节点的指针。 ```c typedef struct Node { char data; struct Node* next; } Node; ``` 2. **初始化链栈**:创建一个链栈头指针,并设置初始状态为空。 ```c Node* stack = NULL; ``` 3. **入栈操作**:遍历字符串,将每个字符依次压入链栈。 ```c void push(char str[], int i) { if (stack == NULL) { stack = (Node*)malloc(sizeof(Node)); stack->data = str[i]; stack->next = NULL; } else { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = str[i]; newNode->next = stack; stack = newNode; } } ``` 4. **出栈操作**:遍历链栈,取出元素并与原字符串对应位置的字符比较,如果发现不匹配,则说明不是回文。 ```c int isPalindromeHelper(char str[], int start, int end) { while (start < end && stack != NULL) { char topChar = stack->data; stack = stack->next; // 如果当前字符不等于对应的反向字符 if (str[start] != str[end]) { return 0; // 不是回文 } start++; end--; } return 1; // 如果所有字符都匹配,返回1表示是回文 } // 判断整个字符串是否是回文 int isPalindrome(char str[]) { int length = strlen(str); for (int i = 0, j = length - 1; i < j; i++) { push(str, i); } return isPalindromeHelper(str, 0, length - 1); } ``` 5. **总结**:函数`isPalindrome`会检查字符串是否为回文。如果它是回文,该函数将返回1;否则返回0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值