C++单向链表实现详解
单向链表通过结构体定义节点,类封装操作。1.ListNode含数据与指针,构造函数初始化;2.SinglyLinkedList以head管理链表,提供插入、删除、查找、遍历方法;3.insertAtHead在头部插入,insertAtTail在尾部插入;4.remove删除指定值节点;5.find判断值存在性;6.print输出链表;7.析构函数释放内存;8.示例展示增删查功能,输出结果验证正确性。
单向链表通过结构体定义节点,类封装操作。1. ListNode含数据与指针,构造函数初始化;2. SinglyLinkedList以head管理链表,提供插入、删除、查找、遍历方法;3. insertAtHead在头部插入,insertAtTail在尾部插入;4. remove删除指定值节点;5. find判断值存在性;6. print输出链表;7. 析构函数释放内存;8. 示例展示增删查功能,输出结果验证正确性。

实现一个单向链表,核心是定义节点结构和管理这些节点的类。C++中可以通过结构体和类来组织数据与操作,下面是一个简洁、实用的单向链表实现方法。
定义链表节点
每个节点包含两部分:数据域和指向下一个节点的指针。
struct ListNode {
int data; // 数据字段,可根据需要改为其他类型
ListNode* next; // 指向下一个节点的指针
// 构造函数,方便初始化
ListNode(int val) : data(val), next(nullptr) {}};
实现链表类
封装链表的操作,如插入、删除、查找、遍历等。使用一个头指针(head)来维护链表起始位置。
class SinglyLinkedList {
private:
ListNode* head; // 头节点指针
public:
// 构造函数
SinglyLinkedList() : head(nullptr) {}
// 析构函数:释放所有节点内存
~SinglyLinkedList() {
while (head != nullptr) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
// 在链表头部插入新节点
void insertAtHead(int val) {
ListNode* newNode = new ListNode(val);
newNode->next = head;
head = newNode;
}
// 在链表尾部插入新节点
void insertAtTail(int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
return;
}
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
// 删除第一个值为val的节点
bool remove(int val) {
if (head == nullptr) return false;
if (head->data == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return true;
}
ListNode* current = head;
while (current->next != nullptr && current->next->data != val) {
current = current->next;
}
if (current->next == nullptr) return false;
ListNode* temp = current->next;
current->next = temp->next;
delete temp;
return true;
}
// 查找某个值是否存在
bool find(int val) const {
ListNode* current = head;
while (current != nullptr) {
if (current->data == val) return true;
current = current->next;
}
return false;
}
// 打印整个链表
void print() const {
ListNode* current = head;
while (current != nullptr) {
std::cout << current->data << " -> ";
current = current->next;
}
std::cout << "nullptr" << std::endl;
}};
使用示例
测试上面实现的链表功能。
#includeusing namespace std; int main() { SinglyLinkedList list;
list.insertAtTail(10); list.insertAtTail(20); list.insertAtHead(5); list.print(); // 输出: 5 -> 10 -> 20 -> nullptr list.remove(10); list.print(); // 输出: 5 -> 20 -> nullptr cout << "Contains 20? " << (list.find(20) ? "Yes" : "No") << endl; return 0;}
基本上就这些。这个实现涵盖了单向链表的基本操作,适合学习和实际应用。注意手动管理内存,在现代C++中也可考虑使用智能指针进一步优化安全性。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















