在C++中实现一个简单的单向链表涉及到定义链表节点类(或结构体)和链表类本身。下面是一个基本的实现,包括了添加节点到链表末尾、头部以及删除节点的功能。
首先,定义链表的节点类ListNode
,它包含数据和指向下一个节点的指针:
class ListNode {
public:
int val; // 节点存储的数据
ListNode* next; // 指向下一个节点的指针
// 构造函数
ListNode(int val) : val(val), next(nullptr) {}
};
接着,定义链表类LinkedList
,它包含指向链表头部的指针,并提供添加和删除节点的方法:
class LinkedList {
private:
ListNode* head; // 指向链表头部的指针
public:
// 构造函数
LinkedList() : head(nullptr) {}
// 析构函数,用于释放链表占用的内存
~LinkedList() {
ListNode* current = head;
while (current != nullptr) {
ListNode* next = current->next;
delete current;
current = next;
}
}
// 在链表末尾添加一个新节点
void append(int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
} else {
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
// 在链表头部添加一个新节点
void prepend(int val) {
ListNode* newNode = new ListNode(val);
newNode->next = head;
head = newNode;
}
// 删除链表中的一个节点(根据值)
void remove(int val) {
if (head == nullptr) return;
if (head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* current = head;
while (current->next != nullptr && current->next->val != val) {
current = current->next;
}
if (current->next != nullptr) {
ListNode* temp = current->next;
current->next = current->next->next;
delete temp;
}
}
// 打印链表中的所有元素
void print() {
ListNode* current = head;
while (current != nullptr) {
std::cout << current->val << " ";
current = current->next;
}
std::cout << std::endl;
}
};
这个简单的链表实现包含了基本的操作:在链表末尾添加节点、在链表头部添加节点、删除特定值的节点以及打印链表中的所有节点。你可以根据需要扩展这个类,添加更多的功能,比如查找节点、插入节点到指定位置等。