如何在C++中实现一个简单的链表数据结构?
在C++中,实现一个简单的链表数据结构涉及定义链表节点和链表本身。以下是实现一个基本单向链表的步骤及代码说明:
1. 定义链表节点结构体或类。每个节点包含数据和指向下一个节点的指针。
```cpp
struct Node {
int data; // 存储数据
Node* next; // 指向下一个节点的指针
Node(int val) : data(val), next(nullptr) {} // 构造函数初始化节点
};
```
2. 实现链表类,提供基本操作如添加、删除和遍历等。
```cpp
class LinkedList {
private:
Node* head; // 指向链表的头节点
public:
LinkedList() : head(nullptr) {} // 构造函数初始化链表为空
// 添加新节点到链表的末尾
void append(int val) {
Node* newNode = new Node(val);
if (head == nullptr) {
head = newNode; // 如果链表为空,新的节点就是头节点
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next; // 找到最后一个节点
}
temp->next = newNode; // 将新节点连接到链表末尾
}
}
// 删除值为val的节点
void remove(int val) {
if (head == nullptr) return;
if (head->data == val) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
Node* previous = nullptr;
while (current != nullptr && current->data != val) {
previous = current;
current = current->next;
}
if (current != nullptr) {
previous->next = current->next;
delete current;
}
}
// 遍历链表并打印数据
void display() const {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
// 析构函数,删除所有节点以防止内存泄漏
~LinkedList() {
Node* temp;
while (head != nullptr) {
temp = head;
head = head->next;
delete temp;
}
}
};
```
3. 使用链表类进行操作。
```cpp
int main() {
LinkedList list;
list.append(10);
list.append(20);
list.append(30);
list.display(); // 输出:10 20 30
list.remove(20);
list.display(); // 输出:10 30
return 0;
}
```
以上代码展示了如何创建一个简单的链表,支持添加、删除和显示节点的基本功能。同时也注意在析构函数中释放内存,防止内存泄漏。
1. 定义链表节点结构体或类。每个节点包含数据和指向下一个节点的指针。
```cpp
struct Node {
int data; // 存储数据
Node* next; // 指向下一个节点的指针
Node(int val) : data(val), next(nullptr) {} // 构造函数初始化节点
};
```
2. 实现链表类,提供基本操作如添加、删除和遍历等。
```cpp
class LinkedList {
private:
Node* head; // 指向链表的头节点
public:
LinkedList() : head(nullptr) {} // 构造函数初始化链表为空
// 添加新节点到链表的末尾
void append(int val) {
Node* newNode = new Node(val);
if (head == nullptr) {
head = newNode; // 如果链表为空,新的节点就是头节点
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next; // 找到最后一个节点
}
temp->next = newNode; // 将新节点连接到链表末尾
}
}
// 删除值为val的节点
void remove(int val) {
if (head == nullptr) return;
if (head->data == val) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
Node* previous = nullptr;
while (current != nullptr && current->data != val) {
previous = current;
current = current->next;
}
if (current != nullptr) {
previous->next = current->next;
delete current;
}
}
// 遍历链表并打印数据
void display() const {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
// 析构函数,删除所有节点以防止内存泄漏
~LinkedList() {
Node* temp;
while (head != nullptr) {
temp = head;
head = head->next;
delete temp;
}
}
};
```
3. 使用链表类进行操作。
```cpp
int main() {
LinkedList list;
list.append(10);
list.append(20);
list.append(30);
list.display(); // 输出:10 20 30
list.remove(20);
list.display(); // 输出:10 30
return 0;
}
```
以上代码展示了如何创建一个简单的链表,支持添加、删除和显示节点的基本功能。同时也注意在析构函数中释放内存,防止内存泄漏。
若文章对您有帮助,帮忙点个赞!
(微信扫码即可登录,无需注册)