【发布时间】:2017-08-20 20:13:44
【问题描述】:
我正在练习数据结构,我已经实现了一个创建单链表、添加到列表和删除列表的代码。我真的很想知道我的删除列表功能是否真的在做它应该做的事情。我认为这是因为当我尝试在删除后打印列表时它崩溃了。因此,有关确保它删除我的列表的任何建议或您可能对改进我的代码有任何其他建议。在动态分配内存方面,我还是个新手。
typedef struct node {
int data;
node* next;
}* nodePtr;
nodePtr addToList(nodePtr head, int data) {
nodePtr newItem = new node; //create a new item
newItem->data = data; //assign the data to the new item
newItem->next = head; //point to head
return newItem; //return the new head
}
void deleteList(nodePtr head) {
if (head == nullptr) {
return;
}
else {
deleteList(head->next);
delete head;
head = nullptr;
}
}
void Print(nodePtr n) {
while (n != nullptr) {
cout << n->data << " ";
n = n->next;
}
}
int main() {
nodePtr head = new node;
nodePtr second = new node;
nodePtr third = new node;
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = nullptr;
Print(head);
cout << endl;
head = addToList(head, 0);
Print(head);
cout << endl;
deleteList(head);
return 0;
}
【问题讨论】:
-
我建议您使用调试器逐行检查代码以查找并解决问题。
-
你的 addToList 没有做它应该做的事情。尝试在不调用 addToList 函数的情况下调用 delete 并从那里修复。在您的主目录中,您没有使用 addToList 而是手动创建列表。
-
要确定您是否正确清理分配的内容,您可以尝试使用 valgrind 之类的工具。