【发布时间】:2017-04-11 23:58:13
【问题描述】:
想知道我能否就这个单链表问题获得帮助。
所以我有一个简单的结构,带有一个 next 指针和一个 char 指针来形成每个节点。
struct node{
char * nodeName;
node * next;
}
在我的主函数中,我创建了一个名为 name 的动态分配的字符数组,它将被发送到一个函数,该函数在每次调用它时都会创建一个新节点,每次都应该由用户输入一个新名称并且应该分配给创建的每个新节点,但由于某些原因,所有节点都采用输入的最终名称。
我的猜测是所有节点都指向同一个 char 数组,但我不知道如何解决这个问题。这是我的代码。
int main()
{
char * name = new char[MAX_SIZE]; // dynamic array declaration;
for(int i = 0; i < 3; ++i) // do it x number of times.
{
cout << "Enter Node Name" << endl;
cin.get(name, MAX_SIZE, '\n');
cin.ignore(200, '\n');
addNode(name);
}
return 0
}
void addNode(name[])
{
if(!head){ // creates a first node,
head = new node;
head->next = NULL;
head->nodeName = "default node";
}
node * current = head;
node * newNode = new node;
newNode->name = name;//assign user inputed name.
newNode->next = NULL // set next pointer to null
while(current->next)
current = current->next; // traverse to the last node;
current->next = newNode; // connect the new node at the end.
}
代码确实创建了列表,但所有节点的名称都相同,即用户输入的最后一个字符数组。 有什么建议吗?
【问题讨论】:
-
你需要在addNode中复制name。最简单的是将 nodeName 设为 std::string
-
或者,将
char * name = new char[MAX_SIZE]移入您的循环。不过老实说,使用std::string确实是正确的方法。