【发布时间】:2022-10-07 07:59:25
【问题描述】:
我今天开始学习linked lists,我正在尝试删除节点。
void deleteEnd(Node* refNode) {
Node* lastNode;
lastNode = new Node;
while((refNode->next)->next != NULL) {
refNode = refNode->next;
}
lastNode = refNode->next;
refNode->next = NULL;
delete lastNode;
}
void deleteIndex(Node* refNode, int index) {
Node *prev, *next, *deleted;
prev = new Node;
next = new Node;
deleted = new Node;
for(int i=1; i < index; i++) {
refNode = refNode->next;
}
prev = refNode;
deleted = prev->next;
next = deleted->next;
prev->next = next;
free(deleted);
}
我可以在第一个中使用delete,但是当我尝试在第二个中使用它时,它不起作用。终端不给出任何错误信息。
我在网上找了一些资料,但我并不能真正理解。
这是我的链表:
class Node {
public:
int data;
Node *next;
};
-
您不能将
free与new混合使用。如果您使用new,则必须使用delete。free只能用于释放您使用malloc(和相关函数)分配的内存。 -
请,请,请,不在现代 C++ 中使用手动内存管理。请.如果您的教材告诉您这样做,请获取更新的材料。如果您的老师告诉您这样做,请停止倾听并找一个更好的老师。
-
C 中的计数通常从 0 开始,以防万一您在此处遇到错误:for(int i=1; i < index; i++)。这行也没有多大意义:deleted = new Node;
-
显然,手动内存管理不是要走的路。但在任何类型的 C++ 教材中,用户还需要了解幕后发生的事情。这个怎么运作。以及为什么自动内存管理更好。也许这个人的老师选择了保留那节课,直到他们用手动方法挣扎了一段时间。
-
经典链表数据结构讨论使用指针或链接;不是智能指针。恕我直言,比使用智能指针更容易理解。
标签: c++ linked-list free delete-operator