這裏是我寫的刪除函數,用於在需要時從鏈表中刪除一些節點。爲鏈表類型數據結構實現「刪除算法」
- 鏈表存儲爲按字母順序排序
使用下面的功能,當我嘗試刪除鏈表(稱爲頭)的第一個元素,我得到一個運行時錯誤,當我試圖打印鏈接列表(使用打印功能)和程序崩潰。我知道這可能是由於不創建新的頭節點造成的。但我不知道如何解決這個問題。這可能很簡單,但無法弄清楚。你能幫幫:)
這是刪除功能:
void deleteName(someStruct * &head, string name)
{
someStruct * ptr = head;
someStruct * previous;
if(head == NULL)
{
cout << "empty";
}
else if(head->name == name)
{
ptr = head;
head = head->next;
delete head;
}
else
{
while (ptr -> name != name)
{
previous = ptr;
ptr = ptr->next;
}
previous->next = ptr->next;
delete ptr;
}
}
這是打印功能:
void Print(someStruct * head)
{
someStruct * pointer = head;
//List is empty
if(head == NULL)
{
cout << "List is empty" << endl;
}
else
{
while(pointer != NULL)
{
cout << pointer->name;
cout << pointer->points << endl;
pointer = pointer->next;
}
}
}
請顯示[MCVE。 –
當你想要刪除的節點是列表頭時,你有一個錯誤會導致*未定義的行爲*。想想你'刪除'... –
'刪除頭;'應該可以'刪除ptr;' – Jarod42