Ошибка с удалением нескольких элементов. Удалить метод. Единый связанный список

Я сделал (с небольшой помощью) единый связанный список с C ++, который сортирует введенные элементы от наименьшего к наибольшему. Я хочу удалить несколько элементов из одного и того же значения, но метод Delete, который я использую, кажется, способен удалить только один, когда кажется, что код удаляет больше. Я пытаюсь использовать цикл, вызывающий метод Delete, чтобы удалить несколько элементов, и когда он удаляет один, он становится ошибкой сегментации. Буду признателен за помощь. Спасибо.

void List::Append(float time, char type, int cell, long id) {

// Create a new node
Node* newNode = new Node();
newNode->SetTime(time);
newNode->SetType(type);
newNode->SetCell(cell);
newNode->SetId(id);
newNode->SetNext(NULL);

// Create a temp pointer
Node *tmp = head;

if ( tmp ) {
if ( tmp->Time() < newNode->Time() ) {
newNode->SetNext(tmp);
head = newNode;
}
else {
// Nodes already present in the list
// Parse to end of list anytime the next data has lower value
while ( tmp->Next() && tmp->Next()->Time() >= newNode->Time() ) {
tmp = tmp->Next();
}

// Point the lower value node to the new node
Node* _next = tmp->Next();
tmp->SetNext(newNode);
newNode->SetNext(_next);
}
}
else {
// First node in the list
head = newNode;
}

}

void List::Delete(long id) {

// Create a temp pointer
Node *tmp = head;

// No nodes
if ( tmp == NULL )
return;

// Last node of the list
if ( tmp->Next() == NULL ) {
delete tmp;
head = NULL;
}
else {
// Parse thru the nodes
Node *prev;
do {
if ( tmp->Id() == id ) break;
prev = tmp;
tmp = tmp->Next();
} while ( tmp != NULL );

// Adjust the pointers
prev->SetNext(tmp->Next());

// Delete the current node
delete tmp;
}

}

0

Решение

в списке :: Удалить код:

 if ( tmp->Id() == id ) break;<--------

если ты перерыв, цикл do {} while заканчивается. в результате только 1 удаление.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]