写一个C++代码首先实现循环单链表的各种基本运算和整体建表算法;其次设计一个程序调用 循环单链表的这些算法进行功能测试。
时间: 2024-11-22 16:39:53 浏览: 25
在C++中,实现循环单链表的基本操作通常包括创建链表、插入节点、删除节点、查找节点以及遍历列表。下面是一个简单的例子,展示了如何创建循环单链表的结构,并提供一些基础操作。
```cpp
#include <iostream>
// 定义单链表节点
struct Node {
int data;
Node* next;
};
// 创建一个新的节点
Node* createNode(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = newNode; // 循环链表的特点:最后一个节点的next指向自身
return newNode;
}
// 插入节点到链表
void insertNode(Node*& head, int value, bool isAtEnd = false) {
if (head == nullptr) {
head = createNode(value);
} else if (isAtEnd) {
Node* tail = head->next;
tail->next = createNode(value);
tail->next->next = head; // 将新节点加入循环
} else {
Node* current = head;
while (current->next != head) {
current = current->next;
}
current->next = createNode(value);
}
}
// 删除节点
void deleteNode(Node*& head, int value) {
if (head == nullptr || head->data == value) {
return; // 如果链表为空或要删除的是头节点
}
Node* current = head;
Node* previous = nullptr;
while (current->next != head && current->data != value) {
previous = current;
current = current->next;
}
if (current->data == value) { // 找到了目标节点
if (previous == nullptr) {
head = current->next;
} else {
previous->next = current->next;
}
}
}
// 显示链表内容
void displayList(Node* head) {
Node* temp = head;
do {
std::cout << temp->data << " ";
temp = temp->next;
} while (temp != head);
std::cout << "\n";
}
int main() {
Node* listHead = nullptr;
// 测试部分
insertNode(listHead, 1);
insertNode(listHead, 2, true); // 在末尾插入
displayList(listHead); // 输出: 1 2
deleteNode(listHead, 2);
displayList(listHead); // 输出: 1
return 0;
}
```
这个代码实现了循环单链表的基本创建、插入、删除和显示操作。`main()`函数作为测试场景,先建立了一个包含两个节点的链表,然后删除其中一个节点并展示结果。
阅读全文