用C++编写程序完成单链表的建立、查找、插入和删除操作。
时间: 2023-12-13 11:05:22 浏览: 27
好的,下面是一个用C++编写的单链表的例子,包括建立、查找、插入和删除操作的实现:
```cpp
#include <iostream>
// 定义单链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 建立单链表
ListNode* createLinkedList(std::initializer_list<int> values) {
ListNode* head = NULL;
ListNode* tail = NULL;
for (int val : values) {
ListNode* newNode = new ListNode(val);
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 查找链表中是否存在某个值
bool searchLinkedList(ListNode* head, int target) {
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == target) {
return true;
}
curr = curr->next;
}
return false;
}
// 在链表的指定位置插入节点
void insertNode(ListNode*& head, int pos, int val) {
ListNode* newNode = new ListNode(val);
if (pos == 0) {
newNode->next = head;
head = newNode;
} else {
ListNode* curr = head;
int count = 0;
while (curr != NULL && count < pos - 1) {
curr = curr->next;
count++;
}
if (curr != NULL) {
newNode->next = curr->next;
curr->next = newNode;
}
}
}
// 删除链表中指定位置的节点
void deleteNode(ListNode*& head, int pos) {
if (pos == 0) {
ListNode* temp = head;
head = head->next;
delete temp;
} else {
ListNode* curr = head;
int count = 0;
while (curr != NULL && count < pos - 1) {
curr = curr->next;
count++;
}
if (curr != NULL && curr->next != NULL) {
ListNode* temp = curr->next;
curr->next = curr->next->next;
delete temp;
}
}
}
// 打印链表
void printLinkedList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
}
int main() {
// 创建链表 1 -> 2 -> 3 -> 4 -> 5
ListNode* head = createLinkedList({1, 2, 3, 4, 5});
printLinkedList(head);
// 查找链表中是否存在值为 3 的节点
bool found = searchLinkedList(head, 3);
std::cout << "Found 3 in the linked list: " << (found ? "true" : "false") << std::endl;
// 在位置 2 插入值为 6 的节点
insertNode(head, 2, 6);
printLinkedList(head);
// 删除位置 4 的节点
deleteNode(head, 4);
printLinkedList(head);
return 0;
}
```
这段代码实现了单链表的建立、查找、插入和删除操作。你可以根据需要进行修改和扩展。希望对你有帮助!