-2

私はプログラミングに非常に慣れていないため、タイトルをアルファベット順に挿入しようとしていますが、挿入機能が機能していないようです。助けてください!

class Book {

public:
    Book() {
    }
    ;
    Book(char *newTitle) {
        strcpy(title, newTitle);
    }

    char *getBook() {
        return title;
    }

    int compareTo(Book *getbook) {
        return (strcmp(title, getbook->title));
    }

private:
    char title[81];

};

void BookList::insert(Book *newBook) {
    BookNode *node = new BookNode(newBook);
    BookNode *current = NULL;
    BookNode *previous = current;

    node->next = NULL;
    current = head;

    if (current == NULL) {
        head = node;
        head->next = NULL;
    }

    else {
        while (current->next != NULL && (newBook->compareTo(current->book) > 0)) {
            previous = current;

            current = current->next;
        }
        node->next = previous->next;
        previous->next = node;
    }
}
4

2 に答える 2

1

おもう

while (current->next != NULL ...

読むべき

while (current != NULL ...

その他の問題は今のところ見当たりません。

于 2013-03-15T18:20:26.587 に答える
0

実装でリンクリストを実際に利用していません。リンクされたリストへの挿入は、O(1) 操作である必要があります。非常に簡単で効率的です。リストの末尾を追跡するだけで、while ループを削除できます。

class BookList {
public:
    BookNode* head;
    BookNode* end;

    BookList():head(NULL), end(NULL) {}

    void insert(Book data) {
        if(head == NULL) {
            head = new BookNode(data);
            end = head;
        } else {
            end.next = new BookNode(data);
            end = end.next;
        }
    }
};
于 2013-03-15T19:15:00.267 に答える