У меня трудное время, удаляя всех членов в связанной одной функции. Если я сломаю его, как вы видите ниже, он отлично работает, но это кажется дико неэффективным и хочет выяснить правильный способ сделать это. для того, чтобы освободить все узлы, мне нужно иметь функцию, чтобы сначала освободить все узлы, отличные от головы, а затем иметь функцию, свободную от главной ссылки. похоже, это было бы легко сделать, но у меня возникли проблемы.Использование функции для создания связанного списка с двойной стрелкой
Спасибо за помощь!
int main() {
struct node *head = NULL;
createList(&head);
//do stuff with list
freeListMembers(head);
freeListHead(&head);
return 0;
}
int createList(struct node **head) {
//create list
return 0;
}
void freeListMembers(struct node *head){
while(head->next != NULL){
head->next = NULL;
free(head->next);
}
return;
}
void freeListHead(struct node **head) {
*head = NULL;
free(*head);
return;
}
вот код, который я хочу работать, но нет. проблема, которую я вижу, является ошибкой для «* head-> next;» где ВОФК «выражение должно иметь указатель на структуру типа или союзное»
int main() {
struct node *head = NULL;
createList(&head);
//do stuff with list
freeAllListMembers(&head);
return 0;
}
int createList(struct node **head) {
//create list
return 0;
}
void freeAllListMembers(struct node **head){
while (head != NULL) {
struct node *temp = *head->next;
free(*head);
*head = temp ;
}
return;
}
Вы * сделать * есть функция, которая освобождает голову и всех членов. Он называется 'main()'. Ваш вопрос будет более ясным и предоставит больше возможностей для ответов, если вы представите что-то, что вы попробовали, и поэтому оно имеет форму, которую вы хотите, но это не работает для вас. –
@JohnBollinger Спасибо! Я добавил код, который я хочу работать выше – skevthedev