Как удалить строчку в блочном списке?

Я вполне мог что-нибудь напутать, потому что функция не работает корректно! Если в текущем блоке остаются элементы (т.е. cnt > 1), то сдвинуть содержимое блока на одну позицию влево, начиная с последней заполненной ячейки, до позиции удаляемого элемента; уменьшить счетчик на единицу иначе // удаляется последний элемент исключить опустевший блок полностью, удалив узел в двусвязном списке, настроив указатели previous и next, где необходимо

struct record //запись с данными
{
    float key; //ключ
    vector<int> intData; //должен быть массивом
    vector<char> charData; // должен быть массивом
    float floatData; //инфа
};

struct block //блок
{
    size_t      cnt;                //кол-во записей в блоке
    record      cells[blockSize];   //ячейки блока
    block* prev = nullptr;     //предыдущий элемент
    block* next = nullptr;     //следующий элемент
};

struct blockList //список
{
    block* head = nullptr;     //указатель на голову списка
    block* tail = nullptr;     //указатель на хвост списка
};

   void blockList_delete_custom(blockList* l, size_t indexBlock, const size_t indexCell) //Удаление строчки
    {
        block* temp = l->head;
        /*считаем блоки, не доходя до последнего.
        Если это последний блок, проверяем не превышало значение indexBlock фактическому
        количеству блоков. Если нет, тогда удаляем из массива записей этого блока переданные в функцию
        номер блока->номер строчки, при условии, что indexCell < blockSize*/
        while (indexBlock != 0 && temp != l->tail) // перемещаемся по блоклисту в поиске нужного юзерблока
        {
            temp = temp->next;
            indexBlock--;
        }

Ответы (0 шт):