2012-04-11 3 views
1

私が持っている中、このリンクリストに挿入した後、値の先頭の値は最後に入力された値です。どうして?

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

辞書のようなこの

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

と一つのクラスのような一般的なリンクリスト構造体「ノード*ヘッド;」別のクラスです。 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」ではないでしょうか?私がこれで間違ったことを教えてください。

+0

言語タグを追加してください。 –

答えて

0

ノードを1つだけ割り当てています。リストにノード 'A'〜 'Z'を表示する場合は、いつでも新しいノードを割り当ててリストに追加する必要があります。

0

jcopenhaが述べたように、新しいノードを動的に作成するわけではありません。あなたはちょうど 'q'を頭につけ、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; 
} 
関連する問題