我正在尝试创建一个链表,您可以在其中将项目输入到列表中。我可以在列表中输入第一项,但我无法在第一项之后添加项目而不会使程序崩溃。有谁知道出了什么问题?
#include <string>
#include <iostream>
using namespace std;
struct node {
string s;
node *next;
};
node *root;
string ans;
node *conductor;
void displayNodes() {
conductor = root;
while ( conductor != NULL ) {
cout<< conductor->s << endl;
conductor = conductor->next;
}
}
void addNode(string str) {
if (root == NULL) {
root = new node;
root->next = NULL;
root->s = str;
conductor = root->next;
return;
}
conductor->next = new node;
conductor = conductor->next;
conductor->next = NULL;
conductor->s = str;
}
void deleteNode(string str) {
while (conductor != NULL) {
if (conductor->s == str) {
conductor->next = conductor;
} else {
conductor = conductor->next;
}
}
}
int main() {
while (true) {
system("cls");
cout << "Enter a string: ";
cin >> ans;
addNode(ans);
system("cls");
displayNodes();
system("pause");
}
system("pause");
return EXIT_SUCCESS;
}
因为你第一次设置
conductor = root->next;
现在是NULL
,并在下一次尝试时
conductor->next = new node;
这是未定义的行为。
你应该做的是设置
conductor = root;
在第一次迭代中。 conductor
应指向上次创建的节点,而不是指向NULL
。