将节点添加到链表



这是简单地将节点添加到链表。我无法弄清楚为什么每次调用添加函数时头部指针都设置为 null。

//struct declaration of node
struct node {
    int data;
    node* next;
};
//adding node to the head pointer
void add_node(node* head, int d)
{
    node* temp = new node;
    temp->data = d;
    temp->next = NULL;
    node* tmp = head;
    if (tmp != NULL) {
        cout << "shal";
        while (tmp->next != NULL)
            tmp = tmp->next;
        tmp->next = temp;
    }
    else {
        //cout<<temp->data;
        head = temp;
    }
    cout << "dh" << head->data;
}

int main()
{
    node* head = NULL;
    // calling the add function
    add_node(head, 10);
    // head is being taken as null here
    add_node(head, 20);
}

输出:

dh10nulldh20null

请帮助我了解哪里出了问题。

我猜你没有明白指针是什么。

void plus_one(int num) {
    num += 1;
}
int main() {
    int num = 42;
    plus_one(num);
    std::cout << num << std::endl;
}

显然,num仍然是42岁。为什么?因为在函数plus_one中,您可以通过复制获得num

当您调用add_node时,您发送了head指针的副本。由于它是一个指针,你可以修改指针指向的内容,而不是指针本身。你所做的与试图用我的例子43是一回事......如果您要获得副本,则是不可能的。

你需要传递指针的地址,所以调用你的函数,因为它:add_node(&head, 10);并编写你的原型:void add_node(node** head,int d)。您必须修改函数以适应新node**

为什么有效?因为您修改了指向原始指针(指向您的结构)的指针的内容。

相关内容

  • 没有找到相关文章

最新更新