Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Удаление элементов списка

Автор: AlonZo 10.04.2008 0:07

Имеется двухсвязный список. Требуется удалить по ключу определенный элемент списка. Как удалять с середины списка у меня работает, а вот как удалить голову или хвост списка я не знаю. Вот, что делал(приведу часть программы):

Код

class List
{
    struct Element
    {
        int data;
        Element *next;
        Element *pred;
    };
    Element *head;
   public:
    List() {head=NULL;}
    ~List();
    void AddToList(int data);
    void PrintList();
    void SortList();
    void DelElement(int key);
};
void List::DelElement(int key)
{
    Element *temp1,*temp2=head;
    while(temp2->next!=NULL)
    {          if(temp2->data==key)
        {
            temp1=temp2->pred;
            temp1->next=temp2->next;
            temp2->next->pred=temp1;
            delete temp2;
            temp2=temp1;
        }
        temp2=temp2->next;
    }
}

И заодно вопрос по деструктору, правильно ли сделал(вроде работает):
Код

List::~List()
{
    while(head!=NULL)
    {
        Element *temp=head;
        head=head->next;
        delete temp;
    }
}

Автор: volvo 10.04.2008 0:23

Вот это попробуй погонять, вроде бы ничего не упустил:

void List::DelElement(int key)
{
for(Element *T = head; T; T = T-> next) {
if(T->data == key) {
if(T->prev) T->prev->next = T->next;
else head = T->next; // <--- Вот тут я накосячил, забыл next

if(T->next) T->next->prev = T->prev;

delete T; // вот тут не уверен, но вроде бы должно сработать...
}
}
}


Автор: AlonZo 10.04.2008 11:24

Спасибо, то, что надо.