写出单链表的完整操作代码
时间: 2023-06-14 18:07:40 浏览: 107
单链表的完整代码.pdf
下面是单链表的完整操作代码,包括创建、插入、删除、查找、遍历等基本操作:
```C++
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 创建链表
ListNode* createList(int arr[], int n) {
if (n == 0) {
return NULL;
}
ListNode* head = new ListNode(arr[0]);
ListNode* cur = head;
for (int i = 1; i < n; i++) {
cur->next = new ListNode(arr[i]);
cur = cur->next;
}
return head;
}
// 插入节点
void insertNode(ListNode* head, int val) {
ListNode* node = new ListNode(val);
ListNode* cur = head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = node;
}
// 删除节点
void deleteNode(ListNode* head, int val) {
ListNode* cur = head;
while (cur->next != NULL && cur->next->val != val) {
cur = cur->next;
}
if (cur->next != NULL) {
ListNode* temp = cur->next;
cur->next = cur->next->next;
delete temp;
}
}
// 查找节点
ListNode* findNode(ListNode* head, int val) {
ListNode* cur = head;
while (cur != NULL && cur->val != val) {
cur = cur->next;
}
return cur;
}
// 遍历链表
void traverseList(ListNode* head) {
ListNode* cur = head;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
int main() {
int arr[] = {1, 2, 3, 4};
ListNode* head = createList(arr, 4);
// 插入节点
insertNode(head, 5);
traverseList(head);
// 删除节点
deleteNode(head, 3);
traverseList(head);
// 查找节点
ListNode* node = findNode(head, 2);
if (node != NULL) {
cout << "Find node: " << node->val << endl;
} else {
cout << "Not found!" << endl;
}
return 0;
}
```
上面的代码中,我们定义了一个链表节点结构体 `ListNode`,包含一个整数值 `val` 和一个指向下一个节点的指针 `next`。然后我们实现了创建链表、插入节点、删除节点、查找节点、遍历链表等基本操作。在 `main` 函数中,我们创建了一个包含 {1, 2, 3, 4} 的链表,然后测试了插入、删除、查找、遍历等操作。
阅读全文