C++用链栈写一个算法判定给定的字符串是否是回文。(提示:可以将一半字符入栈)
时间: 2024-09-30 17:03:47 浏览: 44
在C++中,我们可以利用链表实现栈来判断一个字符串是否是回文。由于链表可以动态地添加和删除元素,这非常适合用于处理字符串长度不确定的情况。下面是一个简单的步骤描述:
1. 定义一个链表节点结构体,包含数据域和指向下一个节点的指针。
2. 创建一个链栈,初始化为空。
3. 遍历输入字符串的一半,将每个字符依次压入链栈。同时,从后向前遍历另一半字符,与链栈顶的元素比较,如果匹配,则继续,如果不匹配则说明不是回文。
4. 比较结束后,链栈为空或者剩余的字符与链栈顶的字符都匹配,说明字符串是回文。
```cpp
#include <iostream>
#include <string>
// 定义链表节点结构
struct Node {
char data;
Node* next;
};
// 链栈操作函数
Node* push(Node** top, char c) {
Node* newNode = new Node();
newNode->data = c;
newNode->next = *top;
*top = newNode;
return *top;
}
bool isPalindrome(const std::string& str) {
Node* top = nullptr;
int len = str.length();
// 将字符串的一半压入链栈
for (int i = 0; i < len / 2; ++i) {
push(&top, str[i]);
}
// 双向检查,另一半与链栈顶对比
for (int i = len / 2; i < len; ++i) {
if (str[i] != top->data) {
return false;
}
top = top->next;
}
return true;
}
int main() {
std::string str = "madam";
if (isPalindrome(str)) {
std::cout << str << " is a palindrome.\n";
} else {
std::cout << str << " is not a palindrome.\n";
}
return 0;
}
```
阅读全文