Как удалить последний узел в односвязном списке? Это не так, как с головой, когда я мог бы просто написать это:Одиночный список, удаляющий последний узел
void DeleteNode (node *& head, node *& tail, int val)
{
node * p = nullptr;
node * tmp = nullptr;
if (val == head -> data)
{
delete head;
head = head -> next;
}
...
я могу удалить последний узел, как что:
if (val == tail -> data)
{
delete tail;
}
Но тогда, как я могу установить хвост к предыдущему узлу (в двукратно связанный список, я мог бы просто написать tail = tail -> prev для переключения на предыдущий узел).
Я пытался что-то вроде этого:
tail = head;
while (tail != nullptr)
{
tail = tail -> next
}
Но он не должен работать, потому что последний хвостовой узел, который я удалил все еще где-то в памяти, а предыдущий узел по-прежнему указывает на то, чтобы он не указывает на NULL и это не остановится.
структура списка:
struct node
{
int data;
node * next;
node() : next (nullptr) { }
};
Почему существует так много связанных список вопросов в данный момент? Это время, связанное с учебным временем в университете? – Matt