Я имею такую структуруДобавление и удаление из двойного связанного списка
typedef struct node
{
struct node *prev;
void *data;
struct node *next;
}NODE;
typedef struct head
{
unsigned int length;
struct node *first;
struct node *last;
}HEAD;
STATUS addNode(HEAD *head, NODE *newNode, int loc)
{
int i;
STATUS ret = SUCCESS;
NODE *curPtr;
if(head && newNode && loc && (loc <= (head->length)+1))
{
if(loc == 1)
{
newNode->prev = NULL;
newNode->next = head->first;
if(head->first)
head->first = newNode;
}
else
{
curPtr = head->first;
for(i=1; i<(loc-1); i++){
curPtr = curPtr->next;
}
newNode->prev = curPtr;
newNode->next = curPtr->next;
if(curPtr->next){
curPtr->next->prev = newNode;
}
curPtr->next = newNode;
}
head->length++;
}
else
ret = FAILURE;
return ret;
}
STATUS removeNode(HEAD *head,NODE *nodeToRemove)
{
STATUS ret = SUCCESS;
NODE *curPtr;
if(head && head->first)
{
curPtr = nodeToRemove->prev;
curPtr->next = nodeToRemove->next;
if(!(curPtr->next)){
curPtr->next = head->first;
}
head->length--;
}
else
ret = FAILURE;
return ret;
}
Я знаю, что я не называю бесплатно (узел) в удалить из списка, этот вызов сделан где-то еще
моя проблема, что иногда на линии newNode->next = curPtr->next;
в дополнительном узле он падает на ошибку сегментации
Не могли бы вы рассказать мне, почему это может случиться?
Если 'loc == 1', на что указывает указатель старых первых узлов' prev'? И если список пуст, почему бы вам не добавить узел вообще? –
Что касается вашей ошибки сегментации, что делать, если вы хотите добавить новый узел последним? То есть когда 'curPtr' является' NULL'? –
И, наконец, что произойдет, если вы предоставите 'loc' больше, чем есть узлы в списке? –