用c++写代码展示单链表的初始化,取值,查找,插入,删除
时间: 2024-10-22 19:24:03 浏览: 59
在 C++ 中,我们可以使用结构体和指针来实现单链表的基本操作。这里是一个简单的示例,展示了如何初始化、获取节点值、查找元素、插入新元素以及删除节点。
```cpp
#include <iostream>
// 定义链表节点结构
struct ListNode {
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 初始化构造函数
};
// 初始化空链表
ListNode* initList() {
return nullptr;
}
// 获取链表中指定位置的值 (如果不存在则返回 -1 或者抛异常)
int getValue(ListNode* head, int index) {
if (head == nullptr || index < 0) {
std::cerr << "Invalid index" << std::endl;
return -1;
}
ListNode* curr = head;
for (int i = 0; i < index && curr != nullptr; ++i) {
curr = curr->next;
}
return curr ? curr->val : -1; // 如果curr非空,则返回值;否则返回-1
}
// 查找给定值的节点
ListNode* search(ListNode* head, int target) {
while (head != nullptr && head->val != target) {
head = head->next;
}
return head;
}
// 在链表尾部插入新节点
void insertAtEnd(ListNode*& head, int value) {
if (head == nullptr) {
head = new ListNode(value);
return;
}
ListNode* curr = head;
while (curr->next != nullptr) {
curr = curr->next;
}
curr->next = new ListNode(value);
}
// 删除链表中特定值的第一个节点
void removeElement(ListNode*& head, int target) {
if (head == nullptr) {
return;
}
if (head->val == target) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* prev = head;
while (prev->next != nullptr && prev->next->val != target) {
prev = prev->next;
}
if (prev->next != nullptr) {
ListNode* temp = prev->next;
prev->next = prev->next->next;
delete temp;
}
}
int main() {
// 创建链表示例
ListNode* list = initList();
insertAtEnd(list, 1);
insertAtEnd(list, 2);
insertAtEnd(list, 3);
// 打印链表并显示值
ListNode* curr = list;
std::cout << "Original list: ";
while (curr != nullptr) {
std::cout << curr->val << " -> ";
curr = curr->next;
}
std::cout << "nullptr\n";
// 查找和删除元素
int foundVal = getValue(list, 2); // 返回2
ListNode* foundNode = search(list, 2); // 返回指向值为2的节点
removeElement(list, 2); // 删除值为2的节点
// 打印修改后的链表
std::cout << "After removing 2: ";
curr = list;
while (curr != nullptr) {
std::cout << curr->val << " -> ";
curr = curr->next;
}
std::cout << "nullptr\n";
return 0;
}
```
阅读全文