链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和一个指向下一个节点的指针。链表有多种类型,包括单向链表、双向链和循环链表。
#include <iostream>
struct Node {
int data;
Node* next;
};
class LinkedList {
public:
LinkedList() : head(nullptr) {}
void append(int data) {
if (!head) {
head = new Node{data, nullptr};
} else {
Node* current = head;
while (current->next) {
current = current->next;
}
current->next = new Node{data, 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;
}
原因:访问了链表中不存在的节点。
解决方法:在遍历链表时,始终检查当前节点是否为nullptr
。
void display() {
Node* current = head;
while (current != nullptr) { // 检查当前节点是否为空
std::cout << current->data << " -> ";
current = current->next;
}
std::cout << "nullptr" << std::endl;
}
原因:链表节点没有被正确释放。 解决方法:在删除节点或销毁链表时,确保释放所有节点的内存。
~LinkedList() {
Node* current = head;
while (current) {
Node* next = current->next;
delete current;
current = next;
}
}
通过以上信息,你应该能够更好地理解C++中链表的基础概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云