【发布时间】:2018-10-30 22:08:29
【问题描述】:
考虑以下代码:
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()?
【问题讨论】:
-
insertFront()应该更新head。这是列表的起点,可通过getFront()访问 -
列表的第一个节点似乎是
head->next -
这个问题不太清楚。你知道
insertFront和getFront是类方法并且你可以访问类的成员吗?你知道如何从函数中返回值吗? -
为什么
getFront会创建一个新的Node?这没有任何意义。 -
getFront只是从列表中删除节点[如果匹配],但它会被丢弃。那有用吗?返回匹配的节点会更好(例如Node * List::getFront(int &key)并且只是做:if (head->next->key == key) { Node *tmp = head->next; head->next = tmp->next; _size--; return tmp; } else return NULL;另外,在做head->next->key之前你不应该检查head->next的非空值吗?
标签: c++ visual-studio pointers