Направих (с малко помощ) единичен свързан списък с 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;
}
}