如何将指针从void函数传递到另一个C ++

时间:2018-10-30 22:08:30

标签: c++ visual-studio pointers

请考虑以下代码:

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()

1 个答案:

答案 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;
}