打印链接列表中的所有元素

时间:2014-01-29 19:46:15

标签: c++ pointers

来自C ++初学者的问题...因为我想在我的链接列表中打印所有元素,但是代码我只打印了第一个元素。有任何想法吗??谢谢 !!这是我的代码(感谢任何帮助):

#include <iostream>
#include <string>
using namespace std;

struct Entry{
string name,phone;
Entry *next;
};

void PrintEntry(Entry *e)
{
    cout<< e->name << " " << e->phone <<endl;
}

Entry *GetNewEntry()
{
    string name;
    cout<< "Enter name (ENTER to quit): ";
    getline(cin,name);
    if(name == "") return NULL;
    Entry *newOne = new Entry;
    newOne->name = name;
    cout<< "Enter phone: ";
    getline(cin, newOne->phone);
    newOne->next= NULL;
    return newOne;
}

Entry * Buildlist()
{
    Entry *list=NULL;
    while(true){
    Entry *newOne=GetNewEntry();
    if (newOne == NULL) break;
    newOne->next = list;
    list = newOne;
    }
    return list;
}

int main()
{
    Entry *n=Buildlist();
    PrintEntry(n);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

void PrintAll(Entry *e)
{
  for(;e;e = e->next)
      PrintEntry(e)
}

答案 1 :(得分:0)

您的代码存在一些问题。这里有一些提示......
在进行赋值时,在BuildList()函数中:
    list = newOne;
您只是将“最后”条目保存到列表中。所有以前的条目都是孤立的。

声明:
newOne-&gt; next = list; 真的什么都不做......简单的NULL终止newOne-&gt; next(因为'list'仍然是NULL)。此字段已从先前的GetNewEntry()调用设置为NULL。

您的代码的根本问题在于,您实际上并未将每个新创建的节点相互链接,而只保留带有列表的最后一个节点。修复后,需要在循环中调用PrintEntry(),遍历列表以打印每个元素。