list的模拟实现基础概念
list是一种线性数据结构,支持动态内存分配和高效的元素插入、删除操作。模拟实现list需要理解其底层机制,通常通过节点(Node)和指针(Pointer)完成。每个节点包含数据和指向下一个节点的指针。
template <typename T>
struct Node {
T data; // 存储的数据
Node<T>* next; // 指向下一个节点的指针
Node<T>* prev; // 双向链表需要指向前一个节点的指针
};
单链表的模拟实现
单链表的实现主要包含插入、删除、遍历等操作。以下是一个简单的单链表类定义:
template <typename T>
class LinkedList {
private:
Node<T>* head; // 头节点指针
int size; // 链表长度
public:
LinkedList() : head(nullptr), size(0) {}
// 在链表尾部插入元素
void push_back(const T& value) {
Node<T>* newNode = new Node<T>{value, nullptr};
if (head == nullptr) {
head = newNode;
} else {
Node<T>* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
size++;
}
// 删除指定位置的元素
void erase(int index) {
if (index < 0 || index >= size) return;
if (index == 0) {
Node<T>* temp = head;
head = head->next;
delete temp;
} else {
Node<T>* current = head;
for (int i = 0; i < index - 1; ++i) {
current = current->next;
}
Node<T>* temp = current->next;
current->next = temp->next;
delete temp;
}
size--;
}
// 获取链表长度
int getSize() const { return size; }
};
双向链表的模拟实现
双向链表在每个节点中增加一个指向前驱节点的指针,支持双向遍历。以下是双向链表的实现
901

被折叠的 条评论
为什么被折叠?



