Перемещение с двойной связью списка элементов - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь реализовать 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;
}`
...