2016-08-28 9 views
1

1つの文字列を印刷できます。しかし、2つの文字列を追加しようとすると、最初の文字列しか印刷されません。 currはリンクされたリストの先頭です。国を1つ追加してプログラムに印刷するよう指示すると、その国の情報が印刷されます。しかし、もし私が2つの国を加えると、それは最初の国だけを印刷します。複数の文字列を印刷できないのはなぜですか?

void LinkedList::printList() 
{ 
    curr = head; 
    while (curr) 
    { 
     cout << "Country Name: " << curr->name << ", " << "Gold: " << curr-> 
     gold << ", " << "Silver: " << curr->silver << ", " << "Bronze: " << curr->bronze << "\n"; 
     curr = curr->next; 
    } 
} 

bool LinkedList::addCountry(string newName, int gold, int silver, int bronze) { 
    if (head == NULL)// Adding first element 
    { 
     head = new struct Country; 
     if (head == NULL) return false; // could not create head linked list country 
     head->name = newName; 
     head->gold = gold; 
     head->silver = silver; 
     head->bronze = bronze; 
     head->next = NULL; 
     return true; 
    } else { 
     curr = head; 
     while (curr) { 
      curr = curr->next; 
     } 
     curr = new struct Country; 
     if (curr == NULL) 
      return false; 
     curr->name = newName; 
     curr->gold = gold; 
     curr->silver = silver; 
     curr->bronze = bronze; 
     curr->next = NULL; 
     return true; 
    } 
} 
+2

あなたは確かに2番目のものがリストに正しく終わるでしょうか? – tkausl

+0

@AndrewLいいえ、あなたはそれを必要としません。 –

+0

リンクされたリストに文字列を追加する方法を確認できますか? –

答えて

0

printListが正しい。しかし、addCountryでは、最後の要素はちょうど挿入された新しい要素を指していなければなりません。たとえば:Cでも

bool LinkedList::addCountry(string newName, int gold, int silver, int bronze) 
{ 
    Country *newNode = new Country; 
    newNode->name = newName; 
    newNode->gold = gold; 
    newNode->silver = silver; 
    newNode->bronze = bronze; 
    newNode->next = NULL; 

    if (head == NULL) 
    { 
     //adding first element: 
     head = newNode; 
    } 
    else 
    { 
     //find the last element currently in the list: 
     Country *last = head; 
     while (last->next)//<= ***** edited 
      last = last->next; 

     //set newNode as the new last element: 
     last->next = newNode; 
    } 
    return true; 
} 

++あなたは、単純な書き込みnew Countryすることができ、それはstructキーワードを必要としません。

+0

2番目の国を追加しようとすると、プログラムが機能しなくなったと表示されます。しかし、多くの問題を単純化してくれてありがとう。 – helllo

1

@Barmak Shemiraniが正しいです。私はあなたが尾のメンバーを持っていればそれが良いだろうと思う:

class LindedList 
    { 
    public: 
     LindedList() 
     { 
      tail=head=curr=NULL; 
     }; 
     Country* head; 
     Country* curr; 
     Country* tail; 
    void printList() 
    { 
     curr = head; 
     while (curr) 
     { 
      cout << "Country Name: " << curr->name << ", " << "Gold: " << curr-> 
      gold << ", " << "Silver: " << curr->silver << ", " << "Bronze: " << curr->bronze << "\n"; 
      curr = curr->next; 
     } 
    }; 

    bool addCountry(string newName, int gold, int silver, int bronze) 
    { 
     curr = new Country; 
     if (curr == NULL) 
       return false; 
     curr->name = newName; 
     curr->gold = gold; 
     curr->silver = silver; 
     curr->bronze = bronze; 
     curr->next = NULL; 
     if (head == NULL) 
     { 
      head = curr; 
      tail=curr; 

     } else 
     { 
      tail->next=curr; 
      tail=curr; 

     } 
     return true; 
    }; 
    }; 
関連する問題