我無法在列表中查找節點,然後刪除它。我嘗試了很多方法,但這是我的代碼。我不知道問題出在我的插入或可能在我的顯示功能?我「米幾乎沒有學習這一點。C++雙向鏈表搜索和刪除
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;
}
}
爲什麼'node * trash = new node;'?這會泄漏內存。 – crashmstr
您必須在列表的開始或結尾(或兩個)處理節點的特殊情況。這個提示是否足夠? – Beta
'我嘗試了很多方法'應該只有一種方法,它就是你寫下或畫在紙上的方式。當你有這樣的任務時,可以用框和線來表示節點和鏈接。然後,您會看到需要做些什麼才能使中間節點解除鏈接並將其餘兩個節點鏈接在一起。然後你編寫代碼來模擬你在紙上寫的內容。 – PaulMcKenzie