Это просто назначает ваш новый узел локальной переменной n
. Это ничего не меняет в вашем списке:
n=temp;
Эффективным способом сделать это было бы что-то вроде этого:
void insert(int x)
{
node** pp = &head;
while (*pp)
pp = &(*pp)->next;
*pp = new node;
(*pp)->data = x;
(*pp)->next = nullptr;
}
Это просто обходит указатели в списке, используя указатель на указатель. После нахождения указателя завершения (который может быть head
, если список пуст и значение head
было nullptr
в случае, если это не было очевидно), новый узел выделяется и подвешивается на месте. Это также устраняет проблему в исходном сообщении (повешение первого узла в пустом списке с нулевым значением head
).