0

私には関数があり、語幹の辞書を整理することになっています。関数呼び出しを挿入してから、それを正しいアルファベット順に配置するとします。リストの先頭と中央への追加は機能しますが、後方への追加は機能しません。いくつかの情報源を見てきましたが、何が問題なのかわかりません。

void dictionary::insert(string s) {
    stem* t = new stem;

    t->stem = s;
    t->count =0;
    t->next = NULL;

    if (isEmpty()) head = t;
    else {
        stem* temp = head;
        stem* prev =  NULL;

        while (temp != NULL) {
            if (prev == NULL && t->stem < temp ->stem) {
                head = t;
                head->next = temp;
            }
            prev = temp;
            temp = temp->next;

            if(t->stem > prev->stem && t->stem < temp->stem ){
                prev->next =t;
                t->next=temp;
            }
        }

        if(temp == NULL && t->stem > prev->stem){  
            prev->next=t;
        }
    }
}
4

2 に答える 2

1
if (temp->next=NULL) {
    prev->next = t; 
}

単一の等しいの使用法に注意してください。これの効果は、に設定してtemp->nextから魔女をNULL評価if (NULL)することですが、常にfalseになります。を使用する必要があります==


これはおそらく仕事をするでしょう:(申し訳ありませんが、私は今それをテストするためのコンパイラを持っていません)

#include <string>

struct node;
struct node
{
    node* next;
    std::string value;
};

node* head = NULL;

void insert(const std::string& word)
{
    node* n = new node;
    n->value = word;
    node* temp = head;
    node** tempp = &head;
    while (true)
    {
        if (temp == NULL or temp->value > word)
        {
            n->next = temp;
            *tempp = n;
            return;
        }
        temp = temp->next;
        tempp = &temp->next;
    }
}
于 2012-10-11T00:12:06.127 に答える
1

ステートメント if(temp->next=NULL) はブール値ではなく代入になります。これが、リストの最後への挿入が機能していないように見える理由です。

于 2012-10-11T00:19:49.753 に答える