完成单链表的建立、取值、查找、插入和删除操作。单链表存储元素为int的数据元素,取值范围1900。
时间: 2024-09-25 09:18:38 浏览: 17
为了完成单链表的建立、取值、查找、插入和删除操作,你可以参考以下C++代码:
```cpp
#include <iostream>
// 定义链表节点结构
struct ListNode {
int data;
ListNode* next;
ListNode(int val = 0) : data(val), next(nullptr) {}
};
class LinkedList {
private:
ListNode* head;
public:
// 初始化链表为空
LinkedList() : head(nullptr) {}
// 插入节点
void insert(int value) {
ListNode* newNode = new ListNode(value);
if (head == nullptr) {
head = newNode;
} else {
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
// 取值
int get(int index) const {
if (index < 0 || index >= size()) {
throw std::out_of_range("Index out of range");
}
ListNode* current = head;
for (int i = 0; i < index; ++i) {
current = current->next;
}
return current->data;
}
// 查找
bool find(int value) const {
ListNode* current = head;
while (current != nullptr) {
if (current->data == value) {
return true;
}
current = current->next;
}
return false;
}
// 删除节点
void remove(int value) {
if (head == nullptr) {
return;
}
if (head->data == value) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr && current->data != value) {
prev = current;
current = current->next;
}
if (current != nullptr) {
prev->next = current->next;
delete current;
}
}
// 获取链表长度
int size() const {
int count = 0;
ListNode* current = head;
while (current != nullptr) {
++count;
current = current->next;
}
return count;
}
// 主函数演示操作
void demonstrateMain() {
try {
for (int i = 1900; i > 1890; --i) { // 示例数据范围
insert(i);
}
std::cout << "List: ";
for (int i = 1900; i <= 1909; ++i) {
std::cout << get(i - 1900) << " ";
}
std::cout << "\n";
if (find(1905)) {
std::cout << "Element 1905 found.\n";
} else {
std::cout << "Element 1905 not found.\n";
}
remove(1905);
std::cout << "List after removing 1905:\n";
for (int i = 1900; i <= 1904; ++i) {
std::cout << get(i - 1900) << " ";
}
std::cout << "\n";
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << '\n';
}
}
~LinkedList() {
deleteNode(head);
}
private:
// 辅助函数,用于安全地删除链表节点
void deleteNode(ListNode* node) {
if (node == nullptr) return;
deleteNode(node->next);
delete node;
}
};
int main() {
LinkedList list;
list.demonstrateMain();
return 0;
}
```
这段代码首先定义了链表节点结构`ListNode`,然后在`LinkedList`类中实现了所需的插入、取值、查找和删除操作。在`demonstrateMain()`函数中,我们创建了一个包含1900到1909之间整数的链表,并进行了相应的操作演示。请注意,这里的数据范围仅用于示例,你可以根据实际情况调整。