我在查找列表中的节点时遇到问题,然后将其删除。我已经尝试了很多方法,但到目前为止这是我的代码。我不知道问题是在我的插入中还是在我的显示功能中?我几乎没有学到这一点。
void removeStudent(int id)
{
node *trash = NULL;
node *current = head;
while ( current!= NULL)
{
if ( current->data.id == id)
{
trash = current;
current->prev->next = current->next;
current->next->prev = current->prev;
delete trash;
}
}
}
这是我的插入功能
void push(student s)
{
node *tmp = new node;
tmp->data = s;
tmp->next = head;
tmp->prev = NULL;
if (head == NULL)
{
head = tmp;
tail = tmp;
}
else
{
head->prev = tmp;
head = tmp;
}
}
这是我的显示功能
void display()
{
node *current = head;
while (current!=NULL)
{
cout << current->data.name << endl;
cout << current->data.GPA << endl;
cout << current->data.id << endl;
cout << current->data.university << endl;
current = current->next;
}
}
答案 0 :(得分:0)
node *trash = new node;
trash = current;
内存泄漏,因为你丢失了newin第一行分配的内存而你没有保留指向该内存的指针。您将指针trash
指定为current
。
你应该这样做:
node *trash = NULL; // declare a pointer and set it to NULL
提示:
在处理列表时,为了测试您的代码,请使用纸张和铅笔,创建一个小列表,并在文件中运行从列表的开头和结尾修改(此处删除)节点的情况。
此外,当列表只有一个节点时会发生什么,以及当它是空的时会发生什么。
答案 1 :(得分:0)
current = current->next;
?
答案 2 :(得分:0)
尝试以下方法。我想你的类也包含数据成员tail。
void removeStudent( int id )
{
node *current = head;
while ( current != NULL && current->data.id != id ) current = current->next;
if ( current != NULL )
{
if ( current->prev != NULL ) current->prev->next = current->next;
else head = current->next;
if ( current->next != NULL ) current->next->prev = current->prev;
else tail = current->prev;
delete current;
}
}
如果您的类没有数据成员尾,那么您必须删除语句
else tail = current->prev;
来自功能体。