Невозможно избавиться от узла, не имеющего указателя на предшественника в списке.
Что вы можете сделать, это переместить ->data
и ->next
из node->next
в node
и избавиться от node->next
.Это будет почти так же, как запрошено - избавьтесь от данных, хранящихся в node->data
, и сделайте список на один элемент короче.
Шаги:
- Утилизация
node->data
- Сохранить указатель на подлежащий удалению узел
tmp = node->next
- Скопировать следующую статистику узла в текущий узел
node->next = tmp->next; node->data = tmp->data
- Удалить
tmp
И код (не пытался скомпилировать):
node->val = 42; // dispose of node own data (not required for RAII fields)
ListNode* tmp = node->next;
*(node) = *(node->next);
delete tmp;