Mik*_*rew -3 c++ pointers linked-list data-structures
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);
}
`
Run Code Online (Sandbox Code Playgroud)
在上面提到的基本链表代码中,每次调用insert_node函数时,它都会到达点.1.这意味着总是有头/指向NULL,这实际上意味着头没有被更新 - 但我在点.2更新它..提前致谢.:)
指针是一个变量,就像任何其他变量一样,因此它可以通过值,引用或指针传递.你按值传递它,
void insert_node(node* head, int val)
Run Code Online (Sandbox Code Playgroud)
如果要更改它,请通过引用传递它
void insert_node(node* & head, int val)
Run Code Online (Sandbox Code Playgroud)
或者通过指针指向它
void insert_node(node** head, int val)
Run Code Online (Sandbox Code Playgroud)
通过引用传递可能最容易,因为它不涉及任何代码更改.您还可以使用a typedef node* NODEPTR;作为类型别名,然后事情变得更加透明,
void insert_node(NODEPTR head, int val) // a bit more clear that head is passed by value
Run Code Online (Sandbox Code Playgroud)