【发布时间】:2018-02-25 04:51:38
【问题描述】:
所以我在一个带有链接列表的实验室中工作,如果在遍历列表后找不到元素,我必须输出错误消息。我的问题是,如果我把这个 if 语句放在 while 循环之后还是 else 语句之后,难道不应该有所不同吗?如果我把它放在第二个 else 之后,函数不应该在 else 完成执行后立即结束吗? 我尝试运行它,但仍然得到相同的预期输出,但我试图找出将它放在哪里最有意义,因为实验室是根据效率和风格进行分级的。
void AnyList::deleteNode(int deleteData)
{
if (count == 0)
{
cerr << "Cannot delete from an empty list.\n";
}
else
{
Node *current = ptrToFirst;
bool found = false;
if (current->getData() == deleteData)
{
ptrToFirst = current->getPtrToNext();
delete current;
current = NULL;
count--;
found = true;
}
else
{
Node *trailCurrent = current;
current = current->getPtrToNext();
while (current != NULL && !found)
{
if (current->getData() == deleteData)
{
trailCurrent->setPtrToNext(current->getPtrToNext());
delete current;
current = NULL;
trailCurrent = NULL;
count--;
found = true;
}
else
{
trailCurrent = current;
current = current->getPtrToNext();
}
}
//if (!found) <-- Does it make more sense to put it here?
//{
// cerr << "Item to be deleted is not in the list.\n";
//}
}
//if (!found) <-- Or here?
//{
// cerr << "Item to be deleted is not in the list.\n";
//}
}
}
【问题讨论】:
-
如果
bool found = false;被声明在else {的范围内(连同Node *trailCurrent = current;),那会有所不同。在这种情况下,第一个if是唯一一个found仍在范围内的。
标签: c++ pointers if-statement linked-list