实例验证,用c++自行设计一个有环的链表和一个无环的链表,给出判别结果,并输出链表的内容
时间: 2024-09-20 21:04:15 浏览: 32
在 C++ 中,我们可以先分别创建一个有环的链表和一个无环的链表,然后设计一个函数来进行实例验证。我们使用快慢指针法判断链表是否有环。
**无环链表的例子:**
```cpp
#include <iostream>
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
// 创建无环链表
Node* createUnCycleList() {
Node* head = new Node(1);
Node* second = new Node(2);
Node* third = new Node(3);
head->next = second;
second->next = third;
return head;
}
// 输出链表内容
void printList(Node* node) {
while (node) {
std::cout << node->data << " -> ";
node = node->next;
}
std::cout << "NULL\n";
}
int main() {
Node* unCycleList = createUnCycleList();
std::cout << "无环链表:\n";
printList(unCycleList);
// ...其他验证步骤...
// 判别无环,这里可以直接输出,无需特殊处理
return 0;
}
```
**有环链表的例子:**
```cpp
Node* createCycleList() {
Node* head = new Node(1);
Node* cycleStart = new Node(2);
Node* third = new Node(3);
head->next = cycleStart;
cycleStart->next = third;
third->next = cycleStart; // 创建环
return head;
}
// 检测环
bool hasCycle(Node* head) {
Node* slow = head;
Node* fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) { // 环路条件
return true;
}
}
return false;
}
// 输出链表内容
void printListWithCycle(Node* node) {
if (!hasCycle(node)) {
std::cout << "链表无环:\n";
} else {
std::cout << "链表有环:\n";
}
printList(node);
}
int main() {
Node* cycleList = createCycleList();
printListWithCycle(cycleList);
return 0;
}
```
在上面的代码中,对于有环链表,我们在`main`函数中会先检测环的存在,如果存在则输出“链表有环”,否则输出“链表无环”。如果没有环,则直接输出链表的内容。对于无环链表,我们仅输出其内容。
阅读全文