Я пытаюсь реализовать 4 функции для двусвязного списка: одну, которая перемещает текущий элемент к голове, одну, которая перемещает его к предыдущему элементу, одну к следующему элементу и одну к хвосту.Кажется, что они все работают индивидуально, но когда я объединяю любые два, я получаю ошибку сегментации.Я считаю, что порядок обновлений в одной или нескольких функциях неправильный, но я не могу понять, какие именно.
void DoublyLinkedList::Head()
{
if(head == current)
return;
if (tail == current)
{
current->next->prev = NULL;
tail = current->prev;
}
current->next->prev = current->prev;
head->prev = current;
current->next = head;
current->prev = NULL;
head = current;
}
void DoublyLinkedList::Next()
{
current->object->Print();
// Ignore if current position is past-the-end
if (!current)
return;
Node *right = current->next;
right->prev = current->prev;
current->next = right->next;
if (right->prev)
right->prev->next = right;
if (current->next)
current->next->prev = current;
current->prev = right;
right->next = current;
}
void DoublyLinkedList::Prev()
{
std::cout << "Current Object \n";
current->object->Print();
if(current->prev==NULL)
return; //Left most ... so return
Node *left = current->prev;
left->next = current->next;
current->prev = left->prev;
if (left->next)
left->next->prev = left;
if (current->prev)
current->prev->next = current;
current->next = left;
left->prev = current;
}
void DoublyLinkedList::Tail()
{
if(tail == current)
return;
if (head == current)
{
current->next->prev = NULL;
head = current->next;
}
current->next->prev = current->prev;
current->prev->next = current->next;
current->next = NULL;
current->prev = tail;
tail = current;
}`