C++实现带头结点的简单链表,包括创建链表、添加结点、删除结点等基本操作
时间: 2024-10-08 20:19:21 浏览: 78
在C++中,我们可以使用结构体定义一个节点,并通过指针来构建链表。以下是实现一个简单带头结点的单向链表的基本步骤:
```cpp
#include <iostream>
// 定义链表节点结构体
struct ListNode {
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数,初始化值和next为nullptr
};
// 创建一个新的链表
ListNode* createList() {
return new ListNode(0); // 创建一个带初始值0的头结点
}
// 添加新节点到链表末尾
void addNode(ListNode*& head, int val) {
if (head == nullptr) {
head = new ListNode(val);
return;
}
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new ListNode(val);
}
// 删除指定值的节点
void deleteNode(ListNode*& head, int val) {
if (head == nullptr || 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* toDelete = current->next;
current->next = current->next->next;
delete toDelete;
}
}
// 打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->val << " -> ";
temp = temp->next;
}
std::cout << "nullptr" << std::endl;
}
// 示例
int main() {
ListNode* list = createList();
addNode(list, 1);
addNode(list, 2);
addNode(list, 3);
printList(list); // 输出: 1 -> 2 -> 3 -> nullptr
deleteNode(list, 2);
printList(list); // 输出: 1 -> 3 -> nullptr
return 0;
}
```
在这个例子中,`createList()`函数创建了一个空的链表,`addNode()`用于在链表尾部添加新节点,`deleteNode()`则删除具有指定值的节点,`printList()`用于打印链表的内容。注意,这个实现假设链表可以包含重复值,如果需要删除所有匹配值的节点,你需要稍微修改`deleteNode()`函数。
阅读全文