2016-02-23 1 views
-1
void DoublyLinkedList::addFront(const Bike& e) 
{ 

Node* temp = new Node;      // Create new node. 
temp->bike = e;        // Store data. 
temp->next = head; 
temp->prev = NULL;       // Current head is now next of our new node. 
head->prev = temp; 
head = temp;        // Our new node is now the new head. 
} 

void DoublyLinkedList::addBack(const Bike& e) 
{ 

Node* temp = new Node;   // Create new node 
temp -> bike = e; 
temp -> next = NULL; 
temp -> prev = tail;   // our new nodes prev is now the tail 
tail -> next = temp; 
tail = temp;     // the tail equals the new node         
} 

моему добавить передний метод работает просто отлично, но метод addBack оленьей кожи не в состоянии, однако, когда я отобразить список, не новый узел отображается как есть с надстройкой фронтом.Проблем при добавлении к задней части двусвязного списка

любая идея, что может быть причиной этого? им потерял

редактирования: обновлен код, чтобы включить внушения

+0

Это связано с [Как правильно удалить узел двойного связанного списка?] (Http://stackoverflow.com/questions/35566363/how-to -delete-node-in-double-linked-list-правильно) каким-то образом? –

+0

это должно быть как-то. im возникли проблемы с хвостом/предыдущий аспект этого списка –

+0

'addFront' делает * не * работает просто отлично. Если вы перейдете назад через список, вы не найдете узлов, добавленных 'addFront'. – immibis

ответ

1

Вы правильно инициализировать новый узел в next и prev указатели, где это уместно.

Однако при добавлении в голову непустого списка вы забыли установить указатель prev бывшего головного узла на новый узел во главе списка; и при добавлении в хвост непустого списка вы забыли установить указатель next бывшего хвостового узла на новый узел в хвосте списка.

0

Код, который в конечном итоге работает для меня

void DoublyLinkedList::addFront(const Bike& e) 
{ 
if(empty()){ 
    Node* temp = new Node;      // Create new node. 
    temp->bike = e;        // Store data. 
    temp->next = head;       // Current head is now next of our new node. 
    temp->prev = head; 
    head = temp; 
    tail = temp; 
    quantity++; 
} 
else{ 
    Node* temp = new Node; 
    temp -> bike = e; 
    temp -> next = head; 
    temp -> next -> prev = temp; 
    temp -> prev = NULL; 
    head = temp; 
    quantity++; 
} 
} 


void DoublyLinkedList::addBack(const Bike& e) 
{ 
Node* temp = new Node;   // Create new node 
temp -> bike = e; 
temp -> prev = tail;   // our new nodes prev is now the tail 
temp -> prev -> next = temp; 
temp -> next = NULL; 
tail = temp;     // the tail equals the new node 
quantity++; 
}