我试图从作业中的链接列表中删除节点,并遇到错误我不知道如何解决 .
这是我的 class
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是我创建的一个Phonelist对象,三个名字在List中,是的,第四个是第三个的dupe . 我需要显示错误消息正确触发 .
我已经调试了,第一个删除函数调用正确,但下次firstPtr和walker对象显示名称成员为“读取字符串字符的错误 . ” . 我已经尝试了多种方法来解决这个问题并且这种情况不断发生 . 感谢您的任何帮助 .
1 回答
在任何链表遍历中,您需要测试处理以下情况:
从空列表中添加/删除(头指针为空)
在列表的前面添加/删除(头指针需要更新)
从列表中间添加/删除的一般情况
最后添加/删除的特例
找不到搜索的项目 .
我希望在删除列表头部时看到代码更新
firstPtr
.