Да (почти) - вы можете скопировать содержимое node->next
в node
, а затем удалить node->next
.
В псевдокоде:
sNode* next = node->next; // see below for an important special case
node->data = next->data;
node->next = next->next;
free(next);
Причина, по которой я говорю "почти", заключается в том, что это не работает, если node
не имеет преемника. В этом случае вы должны просмотреть список с самого начала.
Кроме того, необходимо учитывать дополнительную стоимость копирования data
.
Если вы часто удаляете узлы по указателю, вам следует подумать о том, является ли односвязный список правильной структурой данных. Например, двусвязный список не имеет этой проблемы (но имеет дополнительные издержки одного дополнительного указателя на узел).