1

私はこのような一般的なリンクリスト構造体を持っています

template <typename E, typename F>
struct node
{
public:
    E data;
    node<E, F>* next;
    node<F, F>* down;
};

そしてこのような1つのクラス

class LetterList
{
private:
    node <char, Dictionary> *head;
public:
    LetterList(){head = NULL;};
    void createLetterList();
    void print();
};

「node*head;」の辞書 別のクラスです。私がやりたいのは、LetterListクラスを使用してすべてのアルファベットをリンクリストに挿入することです。これが私が持っているコードです。

node <char, Dictionary> *p = new node <char, Dictionary>;
    p->data = 'A';
    char ch;
    if (head == NULL)
        {
            p->next = NULL;
            head = p;
        }

    node <char, Dictionary> *q = head;

    while (true)
    {
        for (int i=66; i<91;i++)
        {
            ch = char (i);
            p->data = ch;
            q ->next = p;
            if (i == 90)
            {
                q->next = NULL;
            }
            else
                q = q->next;
        }
        break;
    }
}

このコードを実行した後、リンクリストの先頭は「Z」ですが、「A」ではありませんか?これで私が間違ったことを教えてください。

4

2 に答える 2

0

割り当てているノードは1つだけです。リストにノード「A」から「Z」を含める場合は、いつでも新しいノードを割り当ててリストに追加する必要があります。

于 2012-04-11T21:45:23.320 に答える
0

jcopenhaで述べたように、新しいノードを動的に作成しているわけではありません。'q'を先頭に向けて、データをA、B、C、...などでZまで更新し続けます。コードの次の更新は機能するはずです。

while (true)
{
    node <char, Dictionary> *temp;
    temp = NULL;
    p -> next = temp;
    for (int i=66; i<91;i++)
    {
        ch = char (i);
        node <char, Dictionary> *z = new node <char, Dictionary>;
        z->data = ch;
        temp = z;
        temp->next = NULL;
        temp = temp->next;       
    }
    break;
}
于 2012-04-12T09:43:13.163 に答える