C++单链表需定义节点结构和链表类,手动管理内存;核心操作包括头插(O(1))、指定位置插入(需遍历)、按值删除(分头/中/尾处理),并需实现析构函数防止内存泄漏。

用 C++ 实现单链表,核心是定义节点结构、管理头指针,并封装插入、删除等操作。不需要依赖 STL 容器,手动管理内存更利于理解数据结构本质。
每个节点包含数据域和指向下一节点的指针;链表类维护头指针(可为 nullptr 表示空表):
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
<p>class LinkedList {
private:
ListNode* head;
public:
LinkedList() : head(nullptr) {}
~LinkedList(); // 后续需实现析构释放内存
};时间复杂度 O(1),适合频繁在开头增删的场景:
void insertAtHead(int value) {
ListNode* newNode = new ListNode(value);
newNode->next = head;
head = newNode;
}需遍历到前一个节点,注意边界检查(i 小于 0 或超过长度时可忽略或报错):
立即学习“C++免费学习笔记(深入)”;
void insertAt(int index, int value) {
if (index == 0) {
insertAtHead(value);
return;
}
ListNode* prev = head;
for (int i = 0; i < index - 1 && prev != nullptr; ++i) {
prev = prev->next;
}
if (prev == nullptr) return; // 位置无效
ListNode* newNode = new ListNode(value);
newNode->next = prev->next;
prev->next = newNode;
}以按值删除为例(删第一个匹配的节点),需处理三种情况:
void deleteByValue(int value) {
if (!head) return;
if (head->val == value) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* prev = head;
while (prev->next && prev->next->val != value) {
prev = prev->next;
}
if (prev->next) {
ListNode* toDelete = prev->next;
prev->next = toDelete->next;
delete toDelete;
}
}打印链表用于调试:
void print() {
ListNode* cur = head;
while (cur) {
std::cout << cur->val;
if (cur->next) std::cout << " → ";
cur = cur->next;
}
std::cout << std::endl;
}析构函数应逐个释放节点:
LinkedList::~LinkedList() {
while (head) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}不复杂但容易忽略
以上就是如何用c++++实现一个链表 单链表的创建、插入和删除【数据结构】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号