[英]C++ Deleting Node from Linked List
我試圖從分配的鏈接列表中刪除節點,遇到一個錯誤,我不知道如何解決。
這是我班
class PhoneList
{
public:
PhoneList(string/*name*/);
~PhoneList();
void showList(ostream&/*file/screen*/) const;
friend void showList(ostream&/*file/screen*/, PhoneList/*List*/);
void addDirectory(string/*name*/, int/*areaCode*/, int/*phoneNo*/);
void removeDirectory(string/*name*/);
int getNoDirectories()const { return noDirectories; }
string getTitle()const { return title; }
private:
Directory *firstPtr;
string title;
int noDirectories;
};
這是我的目錄結構
struct Directory
{
string name;
int areaCode;
int phoneNo;
Directory *link;
};
這是我的刪除功能
void PhoneList::removeDirectory(string delName)
{
Directory *walker = NULL;
Directory *stalker = NULL;
Directory *placeHolder = NULL;
walker = firstPtr;
stalker = NULL;
while (walker != NULL)
{
if (walker->name == delName)
{
break;
}
else
{
stalker = walker;
walker = walker->link;
}
}
if (walker == NULL)
{
cout << "Contact not found. Removal not possible. Please enter valid contact name." << endl;
}
else
{
stalker = walker;
walker = walker->link;
delete stalker;
cout << "Contact Deleted." << endl;
}
}
這是我正在使用的客戶端代碼
myBlackBook->removeDirectory("Adam Taurus");
myBlackBook->removeDirectory("Xander Rogan");
myBlackBook->removeDirectory("Johnathan Jones");
myBlackBook->removeDirectory("Johnathan Jones");
myBlackBook是我創建的一個電話列表對象,三個名稱在列表中,是的,第四個是第三個的重復。 我需要證明錯誤消息能夠正確觸發。
我已經調試,並且第一個delete函數調用正確進行,但是下一次firstPtr和walker對象將名稱成員顯示為“讀取字符串的錯誤時出錯”。 我嘗試了多種方法來解決此問題,並且這種情況一直在發生。 感謝您的任何幫助。
在任何鏈表遍歷中,您都需要測試處理以下情況:
我不確定您的刪除功能是否正在處理上述情況2。 否則,當刪除列表的firstPtr
時,我希望看到代碼更新firstPtr
。
void PhoneList::removeDirectory(const string& delName)
{
Directory *walker = firstPtr;
Directory* previous = NULL;
bool found = false;
if (firstPtr)
{
while (walker && !found)
{
if (walker->name == delName)
{
if (walker == firstPtr)
{
// handle the special case of deleting from the front
firstPtr = firstPtr->link;
}
else
{
previous->link = walker->link;
}
delete walker;
found = true;
}
else
{
previous = walker;
walker = walker->link;
}
}
}
if (found)
{
cout << "Contact Deleted." << endl;
}
else
{
cout << "Contact not found." << endl;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.