请实现完整的结点定义、单链表的插入和删除结点函数定义及调用,
时间: 2024-10-14 19:07:43 浏览: 25
C语言实现头插法、尾插法两种方法来构建带头结点的单链表.zip
在C++中,我们可以创建一个简单的单链表结构,包含一个节点类`Node`以及插入(`insert`)和删除(`remove`)节点的函数。这里是一个基础版本的例子:
```cpp
#include <iostream>
// 结点定义
class Node {
public:
int data; // 存储数据
Node* next = nullptr; // 指向下一个节点的指针
// 构造函数
Node(int value) : data(value) {}
};
// 插入结点函数
void insert(Node*& head, int value) {
// 如果链表为空,直接新建节点作为头结点
if (head == nullptr) {
head = new Node(value);
return;
}
// 否则,遍历到最后一个节点并插入新节点
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node(value);
}
// 删除结点函数(假设我们要删除值为value的节点)
Node* remove(Node* head, int value) {
if (head == nullptr || head->data == value) { // 如果头结点或头结点就是要删除的值
Node* temp = head;
head = head->next;
delete temp;
return head;
}
Node* prev = head;
Node* current = head->next;
while (current != nullptr && current->data != value) {
prev = current;
current = current->next;
}
// 找到要删除的节点后,更新前一个节点的next指向
if (current != nullptr) {
prev->next = current->next;
delete current;
}
return head;
}
int main() {
Node* listHead = nullptr;
// 插入节点示例
insert(listHead, 1);
insert(listHead, 2);
insert(listHead, 3);
std::cout << "Original List: ";
printList(listHead); // 假设有一个printList函数用于打印链表
// 删除节点示例
remove(listHead, 2);
std::cout << "After Removing 2: ";
printList(listHead);
return 0;
}
// 相关问题--
1. 如何使用这些函数操作实际的链表?
2. 是否考虑了删除过程中可能出现的特殊情况,比如链表只有一条元素的情况?
3. 这个删除函数是否能处理重复的数据?
4. `printList`函数是如何定义的?
阅读全文