我编写了一个函数,将一个元素插入一个双向链表中,按顺序维护列表(按元素struct的字段nr_indeksu
)。它在某些输入上正确运行,但是给出了这些数据......
11111 Aleks 3
22222 Kuba 5
33333 Filip 84
44444 Szymon 2
55555 asdasd 5
66666 qweqwe 2
...它将第一个记录(11111 Aleks 3)放在最后一个位置,而不是第一个位置。这是功能:
void Insert(para **head, para **tail, para wczytywanie) // przerabianie funkcji insert
{
para *temp = (struct para*)malloc(sizeof(struct para));
temp->nr_indeksu = wczytywanie.nr_indeksu;
strcpy(temp->nazwisko, wczytywanie.nazwisko);
temp->ocena = wczytywanie.ocena;
if (isEmpty(*head))
InsertAsFirstElement(head, tail, wczytywanie);
else if (head == tail) // jezeli jest dopiero jeden element w liscie
{
if ((*head)->nr_indeksu < temp->nr_indeksu)
{
InsertAsLastElement(head, tail, wczytywanie);
}
else
{
// dodanie przed headem
(*head)->prev = temp;
temp->next = *head;
temp->prev = NULL;
*head = temp;
}
}
else // jak znajdziemy odpowiedni element wstawiamy za nim
{
struct para *search = *head;
while (search->next != NULL && search->nr_indeksu < temp->nr_indeksu)
search = search->next;
if (search->prev == NULL)
{
(*head)->prev = temp;
temp->next = *head;
temp->prev = NULL;
*head = temp;
}
else if (search->next == NULL)
{
if (search->nr_indeksu < temp->nr_indeksu)
{
temp->next = *tail;
temp->prev = (*tail)->prev;
(*tail)->prev->next = temp;
(*tail)->prev = temp;
} //przed tailem
else
{
temp->prev = *tail;
(*tail)->next = temp;
temp->next = NULL;
(*tail) = temp;
}
//za tailem
}
else
{
temp->next = search;
temp->prev = search->prev;
search->prev->next = temp;
search->prev = temp;
//przed searchem
}
}
}
我的错误是什么?