Я пишу программу, которая сохраняет строки в связанном списке при распределении памяти как для строки, так и для узла. У меня есть функции ввода и поиска, которые работают отлично, но я не могу заставить свою функцию удаления работать. Кажется, он не удаляет информацию с узла, но я в недоумении за то, что набор для чего и что бесплатно. Любая помощь будет более чем приветствуется, даже если это всего лишь намек.Удаление узла из динамически связанного списка
Моего узел и структура
typedef struct listNode { //simple linked list structure
struct listNode *next; //address to next
char *data; //data
} NODE;
typedef struct ListStruct {
NODE *head; //head node for iterating
} LIST;
Это моя текущая нерабочая версия удаления узла
void deleteNode(LIST *list, char *string){ // passed linked list and string to find
NODE *prev, *curr, *temp; //variables init
//int compare; // for strcmp if needed
prev = NULL; //set prev to null
curr = list->head; //set current to the head of the list
while(curr != NULL){ //while the current node is not null
if(strcmp(curr->data,string) == 0){ //check for the proper string
temp = curr; //set temp to current node to be deleted
temp->data = strcpy(curr->data); //copy data so free is possible
prev->next = temp; //set the prev to temp
free(curr->data); //free malloc'd data
free(curr); //free malloc'd node
curr = temp; //set curr back to temp
}
else{ //if string isn't found at current
prev = curr; //set previous to current
curr = curr->next; //and current to current.next
}
}
}//done
Я знаю, что ошибка, когда я найти правильную строку, но я не могу ибо жизнь меня выясняет, что не так. Надеюсь скоро услышать от кого-то и поблагодарить вас, как всегда.
Я бы рекомендовал сделать функции более модульными. Это означает, что поиск и сравнение используются как одна функция, которая вернет NODE. Тогда delete просто возьмет в качестве аргумента NODE и освободит его строку и сам NODE. И тем самым сделать его более отлаживаемым, удобным и понятным. – Maor