我试图从双向链表中删除一个节点。当我删除的节点是列表头时,我的功能工作,但如果它是另一个节点则不行。当我使用列表尾部测试时,程序永远不会结束。
我认为它与我的循环有关,并且它没有到达正确的节点或没有正确地重新连接列表。
如果您有任何想法或需要更多信息,请与我们联系。感谢您提供任何帮助。
标题中的相关信息:
#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;
}