使用链串,实现判断一个输入的字符串是 否是回文。所谓回文是指中间对称的字符 串,如 “abccba” , “aabbkbbaa” 等是回文, 而 “abcda” 不是回文
时间: 2024-02-26 17:58:51 浏览: 74
程判断输入的一串字符是否为“回文”。所谓“回文”是指顺序读和逆序读都一样的字符串。如:“12321”和“abcdcba”都是回文。
好的,我了解了您的问题。以下是使用链串实现判断一个输入的字符串是否是回文的方法:
1. 首先将输入的字符串转换为链串;
2. 遍历链串,将每个字符插入到一个栈中;
3. 再次遍历链串,将每个字符与栈顶的字符进行比较,如果相同则弹出栈顶元素,继续比较下一个字符;
4. 最后,如果栈为空,则说明输入的字符串是回文,否则不是回文。
下面是使用链串实现判断一个输入的字符串是否是回文的示例代码(使用C++语言):
```cpp
#include <iostream>
#include <stack>
using namespace std;
// 链串结构体
struct Node {
char data;
Node* next;
};
// 判断链串是否为空
bool isEmpty(Node* head) {
return head == nullptr;
}
// 插入字符到链串的尾部
void insert(Node*& head, char c) {
Node* newNode = new Node;
newNode->data = c;
newNode->next = nullptr;
if (isEmpty(head)) {
head = newNode;
}
else {
Node* cur = head;
while (cur->next != nullptr) {
cur = cur->next;
}
cur->next = newNode;
}
}
// 将字符串转换为链串
Node* strToNode(string str) {
Node* head = nullptr;
for (char c : str) {
insert(head, c);
}
return head;
}
// 判断字符串是否是回文
bool isPalindrome(Node* head) {
stack<char> s;
// 将链串中的字符插入到栈中
Node* cur = head;
while (cur != nullptr) {
s.push(cur->data);
cur = cur->next;
}
// 比较链串中的字符和栈中的字符
cur = head;
while (cur != nullptr) {
if (cur->data != s.top()) {
return false;
}
s.pop();
cur = cur->next;
}
return true;
}
int main() {
string str;
cout << "请输入一个字符串:";
cin >> str;
Node* head = strToNode(str);
if (isPalindrome(head)) {
cout << "是回文" << endl;
}
else {
cout << "不是回文" << endl;
}
return 0;
}
```
希望能够帮助到您!
阅读全文