双链表移动元素

时间:2018-10-15 23:17:16

标签: c++ doubly-linked-list

我正在尝试为双向链表实现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;
}`

0 个答案:

没有答案