Сортированный связанный список структур, в которых структура теряется - PullRequest
0 голосов
/ 11 марта 2020

Я не могу понять, где моя логика c сбивается с пути в следующих строках кода. Связанный список находится в узлах внутри дерева двоичного поиска. Ниже приведена моя функция сортировки связанного списка по строкам с использованием функции сравнения

void addNewLLObj(TreeNode *tNode, int ranking, string title, int year, float rating){

    LLMovieNode* newNode = new LLMovieNode(ranking, title, year, rating);

    LLMovieNode* crawler = tNode -> head;
    LLMovieNode* prev = NULL;

    while(crawler != NULL){

        if(crawler->title.compare(title) > 0){ // checks if the current nodes title is larger than insert title

            if(crawler == tNode->head){

                newNode->next = crawler;
                tNode->head = newNode;

            }
            else{

                prev->next = newNode;
                newNode->next = crawler;

            }

        }
        else if(crawler->next == NULL){

            crawler->next = newNode;
            newNode->next = NULL;

        }

        prev = crawler;
        crawler = crawler->next;

    }

}

Если я даю строки заголовка "D ccc", "Daaa", "Dfff", "Dzzz", "Deee "в таком порядке

Я потеряю строку" Dfff "при печати связанного списка. Я уверен, что мой обратный список связан правильно. Я просто не могу понять, где лог c не так. Я не уверен, перезаписываю ли я где-нибудь "Dfff" или у меня есть утечка памяти.

1 Ответ

1 голос
/ 11 марта 2020

Ваш l oop всегда бежит до конца списка. Даже после того, как он нашел, куда вставить новый узел. Это может привести к тому, что вы добавите новый узел несколько раз, в результате чего некоторые из ваших узлов исчезнут из списка.

Решение простое: добавьте break в ваш код, чтобы вырваться из l * 1007. * после добавления в newNode.

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