C++中的通用链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据部分和一个指向下一个节点的指针。链表可以动态地分配内存,允许在任何位置插入或删除节点,而不需要移动其他元素。
以下是一个简单的单链表的实现:
#include <iostream>
struct Node {
int data;
Node* next;
};
class LinkedList {
public:
LinkedList() : head(nullptr) {}
void append(int value) {
if (!head) {
head = new Node{value, nullptr};
} else {
Node* current = head;
while (current->next) {
current = current->next;
}
current->next = new Node{value, nullptr};
}
}
void display() {
Node* current = head;
while (current) {
std::cout << current->data << " -> ";
current = current->next;
}
std::cout << "nullptr" << std::endl;
}
private:
Node* head;
};
int main() {
LinkedList list;
list.append(1);
list.append(2);
list.append(3);
list.display();
return 0;
}
原因:在删除节点时没有正确释放内存。
解决方法:确保在删除节点时释放其内存。
void deleteNode(int value) {
if (!head) 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* temp = current->next;
current->next = current->next->next;
delete temp;
}
}
原因:在遍历链表时没有正确检查空指针。
解决方法:在访问下一个节点之前检查当前节点是否为空。
void display() {
Node* current = head;
while (current) {
std::cout << current->data << " -> ";
current = current->next;
}
std::cout << "nullptr" << std::endl;
}
通过以上内容,你应该对C++中的通用链表有了全面的了解,包括其基础概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云