Сортировка содержимого связанного списка в алфавитном порядке по названиям фильмов - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь отсортировать связанный список названий фильмов по алфавиту в c, но не могу понять.Это то, что у меня пока есть:

ReviewNode *sortReviewsByTitle(ReviewNode *head)
{
    char tempTitle[MAX_STR_LEN];
    ReviewNode *p = NULL;
    ReviewNode *temp = NULL;
    p = head;
    while (p!= NULL){
        temp = p;
        while(temp->next != NULL){
            if(strcmp(temp->review.movie_title, temp->next->review.movie_title) > 0){
                strcpy(tempTitle, temp->review.movie_title);
                strcpy(temp->review.movie_title, temp->next->review.movie_title);
                strcpy(temp->next->review.movie_title, tempTitle);
            }
            temp = temp->next;
        }
        p = p ->next;
    }
    return head;

один из моих тестов: sorts: c, b, a и возвращает b, a, c

1 Ответ

0 голосов
/ 27 февраля 2019

Вместо использования strcpy, почему бы просто не переместить указатели узла?Если это односвязный список, вам понадобится узел before, предшествующий узлу temp, поэтому, когда вы делаете temp = temp->next, вы сначала делаете before = temp.Вот как вы бы поступили с двусвязным узлом:

if (strcmp(/*...*/) > 0) {
    ReviewNode *swap = temp->next;
    temp->next = swap->next;
    swap->prev = temp->prev;
    swap->next = temp;
    temp->prev = swap;
}

Таким образом, вам не нужно копировать строки, которые могут занять гораздо больше времени, чем простое перемещение узлов вокруг.Хороший способ узнать, как перемещать эти ссылки, - это взять карандаш и лист бумаги и смоделировать отсортированный список.Это требует времени, но в конечном итоге вы многому у него научитесь!

Без дополнительной информации сложно понять, с какими проблемами вы сталкиваетесь.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...