C++ 无法将节点插入c++;

C++ 无法将节点插入c++;,c++,linked-list,C++,Linked List,我有以下代码。其目的是,每个节点存储一个索引,我希望以升序将节点插入列表中。例如,如果列表当前有1、3、4、8、9和10,我希望能够插入索引为2的节点,使其为1、2、3、4、8、9和10 void createNode(int index) { Node *newNode = new Node(); newNode->index = index; traverse(newNode, head); } 这将创建节点并存储索引值 void traverse(Node

我有以下代码。其目的是,每个节点存储一个索引,我希望以升序将节点插入列表中。例如,如果列表当前有1、3、4、8、9和10,我希望能够插入索引为2的节点,使其为1、2、3、4、8、9和10

void createNode(int index) {
    Node *newNode = new Node();
    newNode->index = index;
    traverse(newNode, head);
}
这将创建节点并存储索引值

void traverse(Node *newN, Node *head) {
    if (head == NULL) {
        newN->next = NULL;
        head = newN;
    }
    else if (head->index < newN->index) {
        newN->next = head->next;
        head->next = newN;
    }
    else
    traverse(newN, head->next);
}
void遍历(节点*newN,节点*head){
if(head==NULL){
newN->next=NULL;
头=新;
}
else if(head->indexindex){
新建->下一步=头部->下一步;
head->next=newN;
}
其他的
导线测量(新建,头部->下一步);
}
这是一个递归函数,用于遍历列表并找到插入节点的位置。如果head为null,则我假设列表为空(或者由于此函数是递归的,它已到达列表的末尾)。否则,它将检查高于其索引的任何值,遇到该值时,应将自身插入其后面

void display(Node *head) {
    if (head == NULL) return;
    cout << head->data << " " << head->index << "   ";
    display(head->next);
}
void显示(节点*头部){
if(head==NULL)返回;
cout数据索引=索引;
if(head==NULL){
newNode->next=NULL;
头=新节点;
}
导线测量(新节点,头部);
}
无效遍历(节点*新节点,节点*头部){
如果(标题->索引索引){
新建->下一步=头部->下一步;
head->next=newN;
}
其他的
导线测量(新建,头部->下一步);
}

这是可行的,所以我猜不是指针问题?

您没有使用以下命令更改任何内容:

head = newN;
因为它被传递为:

void traverse(Node *newN, Node *head) {
如果需要更改,则需要传入对指针的引用:

void traverse(Node *newN, Node *&head) {

您也不应该使用原始指针,例如
Node*head
,而应该使用智能指针。

head
指针是否被传递到
traverse()
。。。如果要更改其值,则需要其地址。它在
createNode()
中也显示为一个全局变量,这让人担心遍历和显示是递归的,因此显示(节点*头部)会在自身内部通过显示(头部->下一步)再次执行。我想我之所以要传递它,是因为它在函数的参数中创建了一个占位符,所以我可以继续传递不同的值,因为它是从head开始的,不是全局的,这些都是类中的所有方法,head也在类中分配给参数在函数外没有任何影响-指针没有什么特殊之处。请注意,递归可能会导致大型列表上的堆栈溢出,并且比迭代方法慢得多。在类中似乎不允许引用指针C++?<代码>节点> */COD>是一个键入;它应该是
Node*&
。这并不能解决问题,但将if条件的第一部分移到createNode似乎可行。我不知道为什么。@molbdnilo谢谢-拼写错误修复。
void traverse(Node *newN, Node *&head) {