用C++设计一个链表
时间: 2024-10-13 16:10:00 浏览: 22
输出链表-C++程序设计(谭浩强完整版)
在C++中设计一个简单的单向链表,我们可以从定义节点开始。一个链表节点通常包含两个部分:数据域和指向下一个节点的指针。下面是一个基础的链表结构体和一些基本操作:
```cpp
// 定义链表节点
struct Node {
int data; // 数据域
Node* next; // 指向下一个节点的指针
Node(int value) : data(value), next(nullptr) {} // 构造函数初始化数据和next为nullptr
};
// 链表类
class LinkedList {
private:
Node* head; // 链表头指针
public:
LinkedList() : head(nullptr) {} // 初始化空链表
// 插入元素到链表头部
void insertAtBeginning(int value) {
Node* newNode = new Node(value);
newNode->next = head;
head = newNode;
}
// 插入元素到链表尾部
void insertAtEnd(int value) {
if (head == nullptr) {
head = new Node(value);
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node(value);
}
}
// 查找特定值并返回其位置(未找到返回-1)
int search(int value) const {
Node* current = head;
int index = 0;
while (current != nullptr && current->data != value) {
current = current->next;
index++;
}
return current == nullptr ? -1 : index;
}
// 删除指定位置的节点(假设索引从0开始)
void deleteNode(int index) {
if (index < 0 || index >= indexOfLast()) {
throw std::runtime_error("Invalid index");
}
if (index == 0) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
for (int i = 0; i < index - 1; ++i) {
current = current->next;
}
Node* nodeToBeDeleted = current->next;
current->next = nodeToBeDeleted->next;
delete nodeToBeDeleted;
}
// 返回链表长度
int size() const {
int count = 0;
Node* current = head;
while (current != nullptr) {
count++;
current = current->next;
}
return count;
}
private:
int indexOfLast() const { return size() - 1; } // 获取最后一个元素的索引
};
```
阅读全文