请写一个C++程序,建议一个简单的单链表,并能够对其进行增加,删除,修改,查询。
时间: 2024-09-22 21:07:39 浏览: 9
下面是一个简单的C++程序,它创建了一个单链表节点结构体,并实现了增加、删除、修改和查询功能。这个例子使用头结点的方式简化了代码:
```cpp
#include <iostream>
// 定义链表节点结构体
struct Node {
int data;
Node* next; // 指向下一个节点的指针
};
class LinkedList {
private:
Node* head;
public:
// 构造函数
LinkedList() : head(nullptr) {}
// 添加元素到链表尾部
void add(int value) {
if (head == nullptr) {
head = new Node{value, nullptr};
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node{value, nullptr};
}
}
// 删除指定值的节点
void remove(int value) {
if (head == nullptr) return;
if (head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* prev = head;
Node* current = head->next;
while (current != nullptr && current->data != value) {
prev = current;
current = current->next;
}
if (current != nullptr) {
prev->next = current->next;
delete current;
}
}
// 修改特定位置的节点值
void update(int index, int newValue) {
if (index <= 0) {
std::cerr << "Invalid index!" << std::endl;
return;
}
if (head == nullptr || index >= count()) {
std::cerr << "Index out of bounds!" << std::endl;
return;
}
Node* current = head;
for (int i = 0; i < index - 1; ++i) {
current = current->next;
}
current->data = newValue;
}
// 查询指定索引的节点值
int get(int index) const {
if (index < 0 || index >= count()) {
throw std::out_of_range("Index out of range");
}
Node* current = head;
for (int i = 0; i < index; ++i) {
current = current->next;
}
return current->data;
}
// 返回链表长度
int count() const {
int count = 0;
Node* current = head;
while (current != nullptr) {
count++;
current = current->next;
}
return count;
}
};
int main() {
LinkedList list;
list.add(1);
list.add(2);
list.add(3);
std::cout << "List after adding: ";
for (int i = 0; i < list.count(); ++i) {
std::cout << list.get(i) << " ";
}
std::cout << std::endl;
list.remove(2);
std::cout << "List after removing 2: ";
for (int i = 0; i < list.count(); ++i) {
std::cout << list.get(i) << " ";
}
std::cout << std::endl;
list.update(0, 4);
std::cout << "List after updating first element to 4: ";
for (int i = 0; i < list.count(); ++i) {
std::cout << list.get(i) << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个程序中,我们首先定义了一个单链表的基本结构,然后在LinkedList类中实现了各种操作。注意,这个实现假设索引从0开始计数,所以如果你想查询第5个节点,实际需要传入4作为参数。同时,删除和更新操作也考虑到了边界条件和无效输入的情况。