Привет всем, нужно что бы в связном списке с приоритетами элементы сохранились по убыванию приоритетов. У элементов есть имя, приоритет, указатель на следующий элемент. Когда добавляю первый элемент то понятно что его нужно просто добавить в список. Даже если есть 1 элемент то понятно: сравнить его приоритет с новым и направить указатели. Но если в списке больше элементов, как найти нужную позицию для нового? Так не правильно работает Code: char* add(PrioQueue *queue, q_elem* newElem) { if (queue->root == NULL) {//нет элементов queue->root = newElem;//root is new element newElem->next = NULL; // } else if (queue->root->next != NULL) {//if root has no next than compare it with new q_elem *temp = queue->root; while(temp != NULL) {//вот тут всё начинается... не знаю как тут правильно сделать if (temp->priority > newElem->priority) { newElem->next = temp->next; queue->root->next = newElem; } else if (temp->priority < newElem->priority) { newElem = queue->root; queue->root = newElem; } temp = temp->next; } } else if (queue->root->priority < newElem->priority) { newElem->next = queue->root; queue->root = newElem; } else if (queue->root->priority > newElem->priority) { queue->root->next = newElem; newElem->next = NULL; } queue->size++; if (newElem != NULL && queue != NULL) { return newElem->name; } return "NULL"; }