Я написал код для вставки элементов в круглый двусвязный список и для отображения этих элементов. Я также должен удалять хвостовой узел из списка, а также искать список для определенного элемента.Удаление узла из круглого двойного связанного списка
Это мой рабочий код для дополнения и печати:
void Circular_DLList::add_to_tail(int a)
{
DLLNode *temp = new DLLNode;
temp->info = a;
if (is_empty()) {
tail = temp;
temp->next = tail;
temp->prev = tail;
}
else {
temp->next = tail->next;
temp->prev = tail;
tail = temp;
tail->prev->next = temp;
}
}
void Circular_DLList::print_list()
{
DLLNode *ptr;
ptr = tail->next;
do {
cout<< ptr->info << endl;
ptr = ptr->next;
}
while(ptr != tail->next);
}
Независимо от того, что я пишу для функции delete_from_tail, это не вызывает ошибку сегментации: 11. Это моя попытка для функции (которая выдает ошибку).
int Circular_DLList::delete_from_tail()
{
int a = tail->info;
if(tail == tail->next) {
delete tail;
tail = NULL;
}
else {
tail = tail->prev;
delete tail->next;
tail->next = NULL;
}
return a;
}
Любой совет относительно того, как исправить это, будет фантастическим. Я пробовал отлаживать, но я не могу понять, в чем проблема, или где именно это связано. Thanks
Вы знаете, что понятие списка круговой линии на самом деле не имеет никакого конечного права? –
@UsamaZafar да, но мы работаем с узлом, называемым хвостом, так что это был просто простой способ сказать это. Я отредактирую сообщение, чтобы уточнить – btoohey
Происходит ли ошибка при удалении? Я догадываюсь, что нет. Я думаю, что это происходит при печати после удаления справа? –