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