C++使用面向对向写双链表
时间: 2024-09-28 12:08:24 浏览: 13
在C++中,使用面向对象的方式实现双链表通常会涉及到类(class)的设计和封装。首先,我们需要创建两个类,一个是节点(Node),另一个是链表(List)。以下是基本的实现步骤:
1. **定义节点类**(Node):
```cpp
class Node {
public:
int data;
Node* prev;
Node* next;
// 构造函数
Node(int value = 0, Node* prev_ = nullptr, Node* next_ = nullptr)
: data(value), prev(prev_), next(next_) {}
};
```
2. **定义链表类**(List):
```cpp
class DoublyLinkedList {
private:
Node* head;
Node* tail;
public:
// 构造函数
DoublyLinkedList() : head(nullptr), tail(nullptr) {}
// 插入节点到链表头部
void insertAtFront(int value);
// 插入节点到链表尾部
void insertAtEnd(int value);
// 删除指定值的节点
void removeNode(int value);
// 遍历并打印链表元素
void printList();
};
```
3. **实现链表操作**:
```cpp
void DoublyLinkedList::insertAtFront(int value) {
Node* newNode = new Node(value);
if (head) {
newNode->next = head;
head->prev = newNode;
}
head = newNode;
if (!tail) {
tail = newNode;
}
}
void DoublyLinkedList::insertAtEnd(int value) {
Node* newNode = new Node(value);
if (tail) {
newNode->prev = tail;
tail->next = newNode;
} else {
head = tail = newNode;
}
}
void DoublyLinkedList::removeNode(int value) {
if (head && head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
while (current && current->data != value) {
current = current->next;
}
if (current) {
current->prev->next = current->next;
if (current->next) {
current->next->prev = current->prev;
} else {
tail = current->prev;
}
delete current;
}
}
void DoublyLinkedList::printList() {
Node* temp = head;
while (temp) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
```