2016-08-28 3 views
1

하나의 문자열을 인쇄 할 수 있습니다. 하지만 두 개의 문자열을 추가하려고하면 첫 번째 문자열 만 인쇄됩니까? curr은 연결된 목록의 시작입니다. 한 국가를 추가하고 인쇄하도록 프로그램에 지시하면 정보가있는 국가가 인쇄됩니다. 그러나 두 나라를 추가하면 첫 번째 국가 만 인쇄됩니다.둘 이상의 문자열을 인쇄 할 수없는 이유는 무엇입니까?

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

두 번째 목록이 올바르게 끝났습니까? – 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

두 번째 국가를 추가하려고하면 프로그램이 작동을 멈춘다 고합니다. 문제를 많이 단순화 해 주셔서 감사합니다. – 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; 
    }; 
    }; 
관련 문제