Я пытаюсь выяснить, как обновить указатель хвоста с новым хвостом после удаления узла в моем связанном списке. (Домашнее задание)C++ - Назначение необработанных указателей на узлы unique_ptr в связанном списке
Я определил голова и хвост, как
std::unique_ptr<Node> head ;
Node* tail ;
и в моей функции для удаления узла из заднего я имею следующую реализацию.
int Deque::remove_back(){
if (empty()) {throw std::runtime_error(std::string("Empty"));};
std::unique_ptr<Node> old;
Node* p = head.get();
int return_value = tail->val;
while (p->next != tail)
{p = p->next)}
old = move(tail);
tail = p;
return return_value;
}
Таким образом, хвост является необработанным указателем типа Узел. P является необработанным указателем типа Node.
Голова - уникальный указатель типа Узел.
Я устанавливаю р = head.get()
так теперь р указывает на голову
р = p-> следующий должен быть итерация вниз мои узлы.
Проблема заключается в том, что p->next != tail
p-> следующий указатель на следующий узел следующего независимо от р.
Я пытаюсь установить указатель на узел равным необработанному указателю узла типа (хвост).
Его рассказывают, что я не могу этого сделать.
Я считаю, что это связано с тем, что p-> не изменилось вместо указателя-владельца вместо наблюдающего, который я объявил.
Ошибки:
Deque.cpp|68|error: no match for 'operator!=' (operand types are 'std::unique_ptr<Node>' and 'Node*')|
Deque.cpp|69|error: cannot convert 'std::unique_ptr<Node>' to 'Node*' in assignment|
Deque.cpp|71|error: no match for 'operator=' (operand types are 'std::unique_ptr<Node>' and 'std::remove_reference<Node*&>::type {aka Node*}')|
Вы хотите использовать 'tail'? Это не помогает. – Slava
Да, к сожалению. :( – TigerCode
«хвост» в односвязном списке полезен только для быстрых вставок в конце списка, но в противном случае бесполезен, поскольку вы не можете использовать его для быстрого удаления в конце списка. –