Реализация поп-функции и связанного списка - PullRequest
0 голосов
/ 25 сентября 2011

Хорошо, ребята, так что я знаю, как работает функция pop, очевидно.Я также знаю, что мне нужно установить LinkNode * top = head и что если top == NULL, то вам нужно вернуть NULL.Я просто не уверен, что честно должен делать после этого.Предполагается, что return удаляет и возвращает значение, а тип данных функции - указатель.

Я не собираюсь публиковать здесь свой код, если только люди не будут честно помогать мне, потому что однажды меня уже сильно критиковали, и это было довольно обескураживающим.: \

1 Ответ

1 голос
/ 25 сентября 2011

«Я… знаю, что мне нужно установить LinkNode * top = head и что если top == NULL, то вам нужно вернуть NULL.Я просто не уверен, что я должен честно делать после этого. ”

Ну, вещи, о которых вы говорите, не имеют ничего общего с pop.

Длясвязанный список, pop о том, чтобы отсоединить первый узел.В зависимости от уровня абстракции функция может возвращать (указатель на) этот узел, или «значение» узла, или ничего.На самом низком уровне абстракции вы хотите только функциональность разъединения, которая может выглядеть следующим образом:

struct Node
{
    Node*     next;
    double    value;
};

Node* unlinked( Node*& p )
{
    Node* const    result = p;

    p = p->next;
    return result;
}

Тогда, например, pop, который разрушает узел, выглядит так:

void pop( Node*& first )
{
    delete unlinked( first );
}

, в то время как pop, который возвращает значение в узле, выглядит следующим образом:

double pop( Node*& first )
{
    std::unique_ptr<Node> p( unlinked( first ) );
    return p->value;
}

Тонкий момент здесь заключается в том, гарантированно ли будет скопировано значение до уничтожения узла.Я просто предполагаю, что это так.Я оставляю это на усмотрение адвокатов, чтобы найти стандарт для этого.

Приветствия & hth.

...