Присвоение (не ссылочного) аргумента функции вне этой функции не действует.
(Самое важное, что нужно узнать о указателях, это то, что в указателях нет ничего особенного.)
Это так же, как
void f(int x) { x = 1000; }
int main()
{
int x = 0;
f(x);
std::cout << x << std::endl;
}
будет печатать 0
, а не 1000
.
Таким образом, ваша первая попытка ничего не меняет и не имеет видимого эффекта.
Ваша вторая попытка также имеет проблему - она копирует следующий узел, но не удаляет его.
Если ваши узлы динамически распределяются, и они обычно есть, это утечка памяти.
Вам нужно что-то вроде этого:
void deleteNode(Node *node)
{
Node* old = node->next;
*node = *(node->next);
delete old;
}
Немного нетрадиционно изменять список, копируя узлы, тем не менее, поскольку это очень неэффективно, если данные узла большие.
Обычно вы обновите ссылки в списке, но для этого вам нужно знать, что такое предыдущий узел.