Нет, это не правильно.Вы также должны обновить предыдущий узел следующим узлом, и заголовок, если заголовок был последним узлом.Поэтому в первую очередь вы должны взять указатель на указатель головы, он вам нужен на случай, если вам нужно обновить заголовок.Во-вторых, поскольку это односвязный список, вы должны сохранить предыдущий узел:
node* Delete_Last(node** head) {
if (!*head) {
return 0;
}
node* i = *head, *previous = 0;
while (i->next){
previous = i;
i = i->next;
}
free(i);
if (previous) {
previous->next = 0;
} else {
*head = 0;
}
return previous;
}
Я не знаю, что вы хотите вернуть, поэтому я предположил, что в вашем коде его новый конец, возвращая голову снова не получаетсясмысл.Теперь вы можете позвонить с помощью:
node* prevLast = Delete_Last(&head);