用C++实现完整代码,实验任务如下:设单链表中存放n个字符,试设计一个算法,判断该字符串是否中心对称。 2.需求分析: 1)程序功能:判断n个字符是否中心对称。 2)输入数据: 输入n个字符 3)输出数据:该字符中心对称/该字符串中心对称 4)测试数据: 例: 5 xndnx // 8 ttccccbb
时间: 2024-02-16 19:00:18 浏览: 69
以下是用 C++ 实现的完整代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 定义单链表结构体
struct ListNode {
char val;
ListNode* next;
ListNode(char x) : val(x), next(NULL) {}
};
// 判断字符串是否中心对称的函数
bool isSymmetric(ListNode* head) {
// 特判
if (head == NULL || head->next == NULL) {
return true;
}
// 快慢指针找到中间结点
ListNode* slow = head;
ListNode* fast = head;
while (fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
// 反转后半部分链表
ListNode* prev = NULL;
ListNode* curr = slow;
while (curr != NULL) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
// 依次比较前半部分和后半部分
ListNode* p1 = head;
ListNode* p2 = prev;
while (p2 != NULL) {
if (p1->val != p2->val) {
return false;
}
p1 = p1->next;
p2 = p2->next;
}
return true;
}
int main() {
int n;
string s;
cin >> n >> s;
// 构造单链表
ListNode* head = new ListNode(s[0]);
ListNode* p = head;
for (int i = 1; i < n; i++) {
ListNode* node = new ListNode(s[i]);
p->next = node;
p = p->next;
}
// 判断单链表是否中心对称
if (isSymmetric(head)) {
cout << "该字符串中心对称" << endl;
} else {
cout << "该字符串不中心对称" << endl;
}
return 0;
}
```
该程序的思路是先用快慢指针找到单链表的中间结点,然后反转后半部分链表,最后依次比较前半部分和后半部分。对于输入的测试数据,程序分别输出:
```
该字符串中心对称
该字符串不中心对称
```
阅读全文