Как передать указатель из void функции в другой C ++ - PullRequest
0 голосов
/ 31 октября 2018

Рассмотрим следующий фрагмент кода:

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 голосов
/ 31 октября 2018

Ваш 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 как 1-й узел в списке, а не 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...