Как вы уже видели, код в connectedQueueDequeue выдает первую запись, как если бы вы хотели стек (LIFO), вы можете перебрать ваш temp
до конца списка, а затем удалить его temp->next
:
static void linkedQueueDequeue(Queue* q) {
LinkedQueue *lq = ((LinkedQueue*)q->privateData);
Node* temp = lq->head->next;
while(temp->next) temp = temp->next;
free(temp->next);
temp->next = 0;
lq->size--;
}
Также обратите внимание, что в реализации Queue / LinkedQueue есть что-то немного странное, учитывая преобразование (LinkedQueue*)q
в строке 2. Вы уверены, что вам нужен этот приведение?Я не могу сказать, потому что вы не дали нам определения Queue и LinkedQueue.Может быть, есть также ->tail
в LinkedQueue
?Если это так, то вам не нужна итерация, и вместо этого вы можете использовать ->tail
для позиционирования temp
(и, конечно: вам нужно обновить ->tail
до нового конца).