C/C++ Урок 32. Удаление элемента из списка
Рассмотрим стандартную задачу - удаление элемента из списка.
Алгоритмически мы должны рассмотреть два случая - когда удаляем самы первый элемент из списка и когда удаляем элемент из середины или конца списка.
Вот код для нашего метода (не забудьте внести объявление этого метода в сам класс):
bool CList::RemoveData(int a, int b)
{
// Если список пуст
if(IsEmpty())
// то выходим.
return false;
// Получаем элемент для удаления.
CData * pData = FindData(a, b);
// Если такого элемента в списке нет
if(pData == NULL)
// то выходим.
return false;
// Если удаляемый элемент - первый в списке.
if(pData == m_pFirst){
// Делаем первым следующий за ним элемент списка.
m_pFirst = pData->m_pNext;
// Освобождаем память, которую занимал удаляемый элемент.
delete pData;
// И выходим.
return true;
}
// Если удаляемый элемент - не первый в списке.
// То делаем так, чтобы элемент, находящийся в списке
// перед удаляемым, показывал на следующий за удаляемым элемент.
GetPrev(pData)->m_pNext = pData->m_pNext;
// Освобождаем память, которую занимал удалаемый элемент.
delete pData;
// И выходим.
return true;
}
Код должен быть ясен из комментария. Если удаление произошло, то возвращяем true, если нет, то false. В этом методе мы использовали другие методы (GetPrev, FindData), написанные на прошлых уроках.
|