2012-10-08 168 views
0

我用C++编写了一个链接列表(带一点帮助),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

@WhozCraig我打算删除一个项目,当它匹配我正在寻找的ID,然后我将它包含在一个循环内,直到它删除所有相同的ID。 – forkfork

回答

0

在列表::删除代码:

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

如果你打破,在做{} while循环结束。导致只有1个删除。