Функция pop_back() должна удалить последний элемент в двусвязном списке. Однако мой текущий код удаляет последние два элемента, а не только один. Я создал свою функцию pop_front(), подобную этой, которая работает отлично. У меня возникли проблемы с выяснением того, что я сделал неправильно.C++ Двусторонний список - удаление элемента из хвоста с помощью pop_back()
Вот часть моего LinkedList заголовка с STRUCT Node:
class linkedlist
{
private:
struct Node{
Node* next;
Node* prev;
element_type data;
};
Node* head;
Node* tail;
unsigned int numElements;
Мой pop_back() из публичной части LinkedList:
void linkedlist::pop_back()
{
if (empty())
return;
else {
Node *delBack = tail;
Node *nodeToDelete = delBack;
delBack = delBack->prev;
delBack->next = NULL;
delete nodeToDelete;
tail = delBack;
numElements--;
}
}
Если проблема не сразу очевидна, то возможно, погрешность погребена где-то еще в коде. Еще ищете.
Ничто не прыгает на меня, основываясь на том, что вы разделили. –
@Ryan Хотя функция неверна, тем не менее она удаляет только один узел. :) Продолжайте поиск. :) –
* Я создал свою функцию pop_front(), подобную этой * *. Это не так, как вы приближаетесь к этим связанных списков. Вы пишете функцию на основе того, что вы нарисовали на бумаге, с полями, представляющими данные и строки, обозначающие ссылки. Вы написали свой 'pop_back', не проверив, что эта логика действительно работает, нарисовав на бумаге правильный подход. – PaulMcKenzie