Я пытаюсь удалить только один узел из двусвязного списка.Моя функция работает, когда удаляемый узел является заголовком списка, но не если это другой узел.Когда я тестирую, используя хвост списка, программа никогда не заканчивается.
Я думаю, что это как-то связано с моим циклом, и что он не достигает нужного узла или неправильно соединяет список.
Пожалуйста, дайте мне знать, если у вас есть идея или вам нужна дополнительная информация,Спасибо за любую помощь, которую вы можете оказать.
Соответствующая информация из заголовка:
#include <stdio.h>
#include <stdlib.h>
typedef struct listNode{
void *data;
struct listNode *previous;
struct listNode *next;
} Node;
typedef struct listHead{
Node *head;
Node *tail;
void (*deleteData)(void *toBeDeleted);
int (*compare)(const void *first,const void *second);
void (*printData)(void *toBePrinted);
} List;
int deleteDataFromList(List *list, void *toBeDeleted);
Моя функция:
#include <stdio.h>
#include <stdlib.h>
#include "LinkedListAPI.h"
int deleteDataFromList(List *list, void *toBeDeleted){
Node *temp = NULL;
if(list == NULL || list->head == NULL || toBeDeleted == NULL) {
return EXIT_FAILURE;
}
temp = list->head;
while(temp != NULL){
if(temp->data == toBeDeleted) {
if(temp == list->head){
list->head = temp->next;
if(list->head != NULL){
list->head->previous = NULL;
}
}
else if(temp == list->tail){
if(temp->previous){
list->tail->previous->next = NULL;
list->tail = list->tail->previous;
}
}
else {
temp->previous->next = temp->next;
temp->next->previous = temp->previous;
}
list->deleteData(temp->data);
free(temp);
temp = NULL;
return EXIT_SUCCESS;
}
}
return -1;
}