无法将节点插入C ++中的链表

时间:2019-05-02 09:42:30

标签: 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 *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);
}

这是一个递归函数,用于遍历列表并查找要插入节点的位置。如果head为null,则假定列表为空(或者看到此函数是递归的,它已经到达列表的末尾)。否则,它会检查任何高于其索引的值,并且在遇到该索引时,应将自身插入到索引后面。

void display(Node *head) {
    if (head == NULL) return;
    cout << head->data << " " << head->index << "   ";
    display(head->next);
}

这应该显示它。但是什么都没有给我。在每个if条件上使用cout进行调试以查看执行了什么,这表明第一个if条件一直在执行。但是列表中什么也没有写。

任何帮助,非常感谢。

更新:

void createNode(int index) {
    Node *newNode = new Node();
    newNode->index = index;
    if (head == NULL) {
        newNode->next = NULL;
        head = newNode;
    }
    traverse(newNode, head);
}

void traverse(Node *newN, Node *head) {
    if (head->index < newN->index) {
        newN->next = head->next;
        head->next = newN;
    }
    else
    traverse(newN, head->next);
}

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

1 个答案:

答案 0 :(得分:3)

您不会更改任何内容:

head = newN;

因为它被传递为:

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

如果需要更改它,则需要传递对指针的引用:

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

您也不应使用Node *head之类的原始指针,而应使用智能指针。