class node{
public: node* next;
int data;
};
void insert_node(node* head, int val){
node* n = new node();
n->next = NULL;
n->data = val;
cout << n->data << endl;
if (head == NULL){ //point .1.
head = n; //point .2.
cout<<"checkpoint 1 reached"<<endl;
}
else{
node* p = head;
while (p->next !=NULL)
p= p->next ;
p->next = n;
head->next = n;
}
return ;
}
int main(){
node* head = NULL;
insert_node(head, 3);
insert_node(head, 4);
insert_node(head, 5);
insert_node(head, 6);
insert_node(head, 7);
insert_node(head, 8);
insert_node(head, 9);
insert_node(head, 0);
}
`
在上面提到的基本链表代码中,每次调用insert_node函数时,它都会到达点.1。,这意味着head总是有/指向NULL,这的确意味着head不是正在更新 - 但我正在点.2。更新它。提前致谢。 :)
答案 0 :(得分:5)
指针是一个变量,就像任何其他变量一样,因此可以通过值,引用或指针传递它。您通过值传递 ,
void insert_node(node* head, int val)
如果您想更改它,请通过引用传递
void insert_node(node* & head, int val)
或指向它的指针
void insert_node(node** head, int val)
通过引用传递可能最容易,因为它不涉及任何代码更改。您还可以使用typedef node* NODEPTR;
作为类型别名,然后事情变得更加透明,
void insert_node(NODEPTR head, int val) // a bit more clear that head is passed by value