c++创建一个环形链表示
时间: 2024-10-12 20:07:58 浏览: 6
创建一个环形链表在C++中通常涉及到两个步骤:首先创建普通链表节点,然后将其中一个节点的`next`指针链接回链表开头形成循环。下面是一个简单的例子,演示如何创建一个环形链表:
```cpp
#include <iostream>
// 定义链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 创建一个普通的单向链表
void createLinearList(ListNode** head, const int* values, int size) {
for (int i = 0; i < size; ++i) {
ListNode* newNode = new ListNode(values[i]);
if (*head == nullptr) {
*head = newNode;
} else {
ListNode* current = *head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
}
// 将链表节点连接成环形链表
void createCircularList(ListNode** head, ListNode* tail) {
tail->next = *head; // 尾部节点指向头部,形成环
*head = tail->next;
}
// 示例:创建一个包含元素[1, 2, 3]的环形链表
int main() {
ListNode* head = nullptr;
ListNode* tail = nullptr;
int values[] = {1, 2, 3};
createLinearList(&head, values, sizeof(values) / sizeof(values[0]));
if (head != nullptr) { // 链表非空
tail = head;
createCircularList(&head, &tail); // 创建环
}
// 现在你可以遍历环形链表
ListNode* currentNode = head;
do {
std::cout << currentNode->val << " ";
currentNode = currentNode->next;
} while (currentNode != head); // 由于是环形链表,再次遇到head会停止
delete head; // 注意释放内存
return 0;
}
```
在这个例子中,我们首先创建了一个线性链表,然后通过`createCircularList`函数将其变成环形链表。注意,你需要在使用完链表之后手动删除所有的`ListNode`实例以避免内存泄漏。