这是简单地将节点添加到链表。我无法弄清楚为什么每次调用添加函数时头部指针都设置为 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**
。
为什么有效?因为您修改了指向原始指针(指向您的结构)的指针的内容。