请考虑以下代码:
void List::insertFront(int key)
{
Node *tmp_node = new Node;
tmp_node->key = key;
tmp_node->next = head->next;
tmp_node->prev = head;
head->next = tmp_node;
_size++;
}
此函数将元素添加到列表的开头,我想在另一个函数中捕获列表的第一个元素并将其删除。为此,我编写了以下代码:
bool List::getFront(int &key)
{
if (head->next->key == key)
{
Node *tmp_node = new Node;
head->next = tmp_node->next;
delete tmp_node;
delete head->next;
_size--;
return true;
}
else return false;
}
如您所见,每次我创建一个使用新的空列表的新节点时,但是我想使用在上一个函数中创建的列表。
如何将节点从insertFront()
传递到getFront()
?
答案 0 :(得分:0)
您的getFront()
代码完全错误。您需要的是这样的东西:
bool List::popFrontIfMatches(int key)
{
Node *tmp_node = head->next;
if ((tmp_node) && (tmp_node->key == key))
{
if (tmp_node->next)
tmp_node->next->prev = tmp_node->prev;
if (tmp_node->prev)
tmp_node->prev->next = tmp_node->next;
head->next = tmp_node->next;
delete tmp_node;
_size--;
return true;
}
else
return false;
}
话虽如此,为什么您将head->next
视为列表中的第一个节点,而不是像通常的惯例那样将head
本身作为列表?
void List::insertFront(int key)
{
Node *tmp_node = new Node;
tmp_node->key = key;
tmp_node->next = head;
tmp_node->prev = NULL;
head = tmp_node;
_size++;
}
bool List::popFrontIfMatches(int key)
{
Node *tmp_node = head;
if ((tmp_node) && (tmp_node->key == key))
{
if (tmp_node->next)
tmp_node->next->prev = tmp_node->prev;
if (tmp_node->prev)
tmp_node->prev->next = tmp_node->next;
head = tmp_node->next;
delete tmp_node;
_size--;
return true;
}
else
return false;
}