我使用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 :(得分:0)
::删除代码:
if ( tmp->Id() == id ) break;<--------
如果中断,则do {} while循环结束。导致只有1个删除。