我有一个相当基本的程序,旨在通过链表对数字列表进行排序。
我挂断的地方是当需要在列表开头插入元素时。 这是有问题的代码块
假设 root->x = 15,并假设用户在出现提示时输入 12:
void addNode(node *root)
{
int check = 0; //To break the loop
node *current = root; //Starts at the head of the linked list
node *temp = new node;
cout << "Enter a value for x" << endl;
cin >> temp->x;
cin.ignore(100,'n');
if(temp->x < root->x)
{
cout << "first" << endl;
temp->next=root;
root=temp;
cout << root->x << " " << root->next->x; //Displays 12 15, the correct response
}
但是,如果在运行此功能后,我尝试
cout << root->x;
回到main(),它再次显示15。 所以代码
root=temp;
一旦我离开该功能就会丢失。 现在,对 *root 的其他更改,例如向 LL 添加另一个元素并在其旁边指向 root->,正在沿用。
建议?
这是因为您正在设置局部node *root
变量,因此您没有修改原始根,而只是修改在堆栈上传递的参数。
要修复它,您需要使用对指针的引用,例如:
void addNode(node*& root)
或指向指针的指针:
void addNode(node **root)