C++ 如果要删除isn';列表中的t
我正在尝试从链接列表中删除,如果成功删除,则返回C++ 如果要删除isn';列表中的t,c++,linked-list,return,C++,Linked List,Return,我正在尝试从链接列表中删除,如果成功删除,则返回true,如果喜欢列表中的数字不在列表中,则返回false。问题是,如果项目不在列表中,我不知道如何返回false。我甚至不知道如何检查它是否在列表中。请帮忙 bool list::deleteElement(int element) { node *curr, *prev; prev = NULL; if(head!=NULL) { for(curr=head; curr->item!=element&a
true
,如果喜欢列表中的数字不在列表中,则返回false
。问题是,如果项目不在列表中,我不知道如何返回false
。我甚至不知道如何检查它是否在列表中。请帮忙
bool list::deleteElement(int element)
{
node *curr, *prev;
prev = NULL;
if(head!=NULL)
{
for(curr=head; curr->item!=element&&curr!=NULL;curr= curr->next)
{
prev=curr;
}
if(curr!=NULL)
{
if(prev==NULL)
{
head = head->next;
delete curr;
numberofelements--;
return true;
}
else
{
prev->next = curr ->next;
delete curr;
return true;
}
}
return false;
}
}//end of function
您的代码几乎是正确的 您不需要显式检查
head
是否为NULL。您的逻辑可以隐式地处理该情况。一旦消除了该测试,将返回false代码>将是函数的最后一行
您需要在for循环中反转检查,以便不尝试取消对空指针的引用:
for (curr = head; curr != NULL && curr->item != element; curr = curr->next)
当prev!=也为空
您可以“计算”出删除,以及numberofelements--
和返回true当curr!=空
我会这样写:
bool list::deleteElement(int element)
{
node *curr = head, *prev = NULL;
for (; curr != NULL && curr->item != element; prev = curr, curr = curr->next);
if (curr == NULL) // element not found
return false;
if (prev == NULL)
head = head->next;
else
prev->next = curr->next;
delete curr;
--numberofelements;
return true;
}
我看到的问题:
当head==NULL
时,您没有return
语句。这是个问题。这是未定义的行为
检查curr->item=元素(&curr)=无效for
循环中的code>不正确。当curr==NULL
时,您将遇到未定义的行为,因为您首先取消引用指针,然后检查它是否为NULL。那应该是curr!=空(&curr->item!=元素
当prev!=空
以下是更新后的函数:
bool list::deleteElement(int element)
{
node *curr, *prev;
prev = NULL;
if(head==NULL)
{
// Empty list. Return right away with false.
return false;
}
for(curr=head; curr!=NULL && curr->item!=element; curr= curr->next)
{
prev=curr;
}
if(curr!=NULL)
{
// The number of elements needs to be decremented
// regardless of whether prev is NULL or not.
numberofelements--;
if(prev==NULL)
{
head = head->next;
delete curr;
return true;
}
else
{
prev->next = curr ->next;
delete curr;
return true;
}
}
return false;
}//end of function