请使用c++语言设计一个线性表,采用链式存储结构,删除一个节点
时间: 2024-10-22 08:22:06 浏览: 27
数据结构实验报告2线性表的链式存储结构.doc
5星 · 资源好评率100%
在C++中,我们可以使用链表数据结构来设计一个简单的线性表,并提供一个删除节点的功能。这里是一个基本的单向链表节点类`Node`以及一个`LinkedList`类的示例:
```cpp
#include <iostream>
// 定义链表节点
class Node {
public:
int data; // 节点存储的数据
Node* next; // 指向下一个节点的指针
Node(int value) : data(value), next(nullptr) {} // 构造函数,初始化值和next指针
};
// 链表类,包含插入、删除等操作
class LinkedList {
private:
Node* head; // 头结点指针
public:
LinkedList() : head(nullptr) {} // 构造函数,初始化头结点为空
~LinkedList() { // 析构函数,遍历并删除所有节点
deleteAllNodes();
}
void insertAtEnd(int value) {
if (!head) {
head = new Node(value);
return;
}
Node* current = head;
while (current->next) {
current = current->next;
}
current->next = new Node(value);
}
void deleteNode(int value) {
if (!head || !head->data == value) return; // 如果列表为空或不是目标值,直接返回
if (head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
while (current->next && current->next->data != value) {
current = current->next;
}
if (current->next) {
Node* toDelete = current->next;
current->next = toDelete->next;
delete toDelete;
}
}
private:
void deleteAllNodes() {
Node* current = head;
Node* nextToDelete;
while (current) {
nextToDelete = current;
current = current->next;
delete nextToDelete;
}
head = nullptr;
}
};
int main() {
LinkedList list;
list.insertAtEnd(1);
list.insertAtEnd(2);
list.insertAtEnd(3);
std::cout << "Before deletion:\n";
printList(list); // 假设有一个printList函数用于打印链表
list.deleteNode(2);
std::cout << "\nAfter deleting node with value 2:\n";
printList(list);
return 0;
}
```
这个例子中,`deleteNode`方法接收一个值,遍历链表找到该值对应的节点然后删除它。如果链表为空或要删除的节点不在链表中,函数不做任何操作。
阅读全文