Функция удаления списка LInked - PullRequest
0 голосов
/ 24 января 2020
void delete_priority (struct pqueue **P, unsigned int priority) {
 if (P == NULL) {
    return;
  }
  struct pqueue *tmp;
  struct pqueue *prev;
  tmp = *P;
  prev = NULL;

  while(tmp != NULL){
    if (tmp->priority == priority) {
        struct queue *mini = tmp->queue;
        if (prev != NULL) {
            prev->next = tmp->next;
        }
        free(tmp);
        struct queue *mini_next, *qlast;
        if (mini == NULL) {
            return;
        }
        do {
            mini_next = mini->next;
            free(mini);
            mini = mini_next;
        } while (mini != NULL);
        return;
    }
    prev = tmp;
    tmp = tmp->next;
}
}

int count_enqueued (struct pqueue *P, unsigned int priority) {
  struct pqueue *tmp = P;
  if (tmp == NULL) {
    return 0;
  }
  do {
    if (tmp->priority ==  priority) {
        int count = 0;
        struct queue *mini_tmp;
        mini_tmp  = tmp->queue;
        if (mini_tmp == NULL) {
            return 0;
        }
        do {
            count++;
            mini_tmp = mini_tmp->next;          
        } while (mini_tmp != NULL);
        return count;
    }
    tmp = tmp->next;
  } while (tmp != NULL);
 }

Я тестировал этот код на https://codeboard.io/projects/131853. Вторая функция в порядке, но я не понимаю, что не так с первой. Как будто она не может справиться с удалением 3 элементов из очереди. Если бы вы могли мне помочь, было бы здорово

...