将节点添加到链接列表

时间:2014-12-04 13:59:40

标签: c++ linked-list

这很简单,可以将节点添加到链表中。我无法弄清楚每次调用add函数时为什么将head指针设置为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

请帮助我理解它出错的地方。

1 个答案:

答案 0 :(得分:1)

我猜你没有得到指针。

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指针的副本。由于它是一个指针,你可以修改指针的POINTED,而不是指针本身。你所做的与尝试用我的例子获得43是一回事......如果你得到一份副本,这是不可能的。

您需要传递指针的地址,因此请按以下方式调用您的函数:add_node(&head, 10);并按原样编写原型:void add_node(node** head,int d)。您必须修改您的功能以适应新的node**

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