这很简单,可以将节点添加到链表中。我无法弄清楚每次调用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
请帮助我理解它出错的地方。
答案 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**
。
为什么会这样?因为您修改了指向原始指针的指针的内容(指向您的结构)。