1. 建立单链表,并在单链表上实现插入、删除和查找操作
时间: 2024-05-12 13:13:16 浏览: 104
好的,我可以为您提供单链表的实现,您可以根据需要进行插入、删除和查找操作。
首先,我们定义一个节点结构体Node,它包含一个数据域data和一个指针域next,指向下一个节点。
```c++
struct Node {
int data;
Node* next;
};
```
然后,我们定义一个链表类LinkedList,它包含一个头指针head,指向链表的第一个节点。
```c++
class LinkedList {
private:
Node* head;
public:
LinkedList(); // 构造函数
~LinkedList(); // 析构函数
void insert(int data); // 插入操作
void remove(int data); // 删除操作
Node* find(int data); // 查找操作
};
```
构造函数和析构函数的实现如下:
```c++
LinkedList::LinkedList() {
head = NULL; // 初始化头指针为空
}
LinkedList::~LinkedList() {
Node* current = head;
while (current != NULL) {
Node* next = current->next;
delete current; // 释放当前节点的内存
current = next;
}
}
```
接下来是插入操作的实现,我们可以在链表的头部插入新节点。
```c++
void LinkedList::insert(int data) {
Node* node = new Node; // 创建新节点
node->data = data; // 设置新节点的数据域
node->next = head; // 新节点的next指向原来的头指针
head = node; // 头指针指向新节点
}
```
删除操作的实现如下,我们可以先查找到要删除的节点,然后将其从链表中移除。
```c++
void LinkedList::remove(int data) {
Node* current = head;
Node* previous = NULL;
while (current != NULL && current->data != data) {
previous = current;
current = current->next;
}
if (current == NULL) {
return; // 没有找到要删除的节点
}
if (previous == NULL) {
head = current->next; // 要删除的节点是头节点
} else {
previous->next = current->next; // 要删除的节点不是头节点
}
delete current; // 释放要删除的节点的内存
}
```
查找操作的实现如下,我们可以遍历链表,查找包含指定数据的节点。
```c++
Node* LinkedList::find(int data) {
Node* current = head;
while (current != NULL && current->data != data) {
current = current->next;
}
return current; // 返回找到的节点,如果没有找到则返回NULL
}
```
完整代码如下:
```c++
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
class LinkedList {
private:
Node* head;
public:
LinkedList(); // 构造函数
~LinkedList(); // 析构函数
void insert(int data); // 插入操作
void remove(int data); // 删除操作
Node* find(int data); // 查找操作
};
LinkedList::LinkedList() {
head = NULL; // 初始化头指针为空
}
LinkedList::~LinkedList() {
Node* current = head;
while (current != NULL) {
Node* next = current->next;
delete current; // 释放当前节点的内存
current = next;
}
}
void LinkedList::insert(int data) {
Node* node = new Node; // 创建新节点
node->data = data; // 设置新节点的数据域
node->next = head; // 新节点的next指向原来的头指针
head = node; // 头指针指向新节点
}
void LinkedList::remove(int data) {
Node* current = head;
Node* previous = NULL;
while (current != NULL && current->data != data) {
previous = current;
current = current->next;
}
if (current == NULL) {
return; // 没有找到要删除的节点
}
if (previous == NULL) {
head = current->next; // 要删除的节点是头节点
} else {
previous->next = current->next; // 要删除的节点不是头节点
}
delete current; // 释放要删除的节点的内存
}
Node* LinkedList::find(int data) {
Node* current = head;
while (current != NULL && current->data != data) {
current = current->next;
}
return current; // 返回找到的节点,如果没有找到则返回NULL
}
int main() {
LinkedList list;
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
Node* node1 = list.find(3);
if (node1 != NULL) {
cout << "Found node: " << node1->data << endl;
} else {
cout << "Node not found" << endl;
}
list.remove(2);
Node* node2 = list.find(2);
if (node2 != NULL) {
cout << "Found node: " << node2->data << endl;
} else {
cout << "Node not found" << endl;
}
return 0;
}
```
阅读全文