2016-08-28 208 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中,最后一个元素必须指向刚刚插入的新元素。例如:

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; 
} 
用C

还++,你可以简单的写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; 
    }; 
    }; 
相关问题