gpt4 book ai didi

c++ - 为什么需要双指针来更改头部而不是链接列表中的其他地方

转载 作者:行者123 更新时间:2023-11-30 04:49:26 26 4
gpt4 key购买 nike

void insertAtTop(node** head, int value){
node* temp=new node();
temp->data=value;
temp->next=*head;
*head=temp;
}

void insertAtLast(node*head, int value){
while(head->next!=NULL){
head=head->next;
}
node*temp=new node();
temp->data=value;
temp->next=NULL;
head->next=temp;
}

我不明白为什么你需要使用指向指针的指针来更改头部,但如果你想在其他地方添加元素,你只需发送 node* head 即可节点**头。就像对于 insertatLast node*head 作为参数一样有效,但如果我为 insertAtTop 做同样的事情,它就不会。

最佳答案

您可以同时使用按引用传递按值传递 来实现insertAtTopinsertAtLast。我建议你阅读 difference between pass by reference and pass by value .您还可以阅读 this .

我假设 head 声明为 node* head;

通过引用传递:

void insertAtTop(node** head, int value){
node* temp=new node();
temp->data=value;
temp->next=*head;
*head=temp;
}

调用:insertAtTop(&head, value);

void insertAtLast(node** head, int value){
node* h = *head;
while(h->next!=NULL){
h = h->next;
}
node* new_node=new node();
new_node->data=value;
new_node->next=NULL;
h->next=new_node;
}

调用:insertAtLast(&head, value);

按值传递:

node* insertAtTop(node* head, int value){
node* temp=new node();
temp->data=value;
temp->next= head;
head = temp;
return head;
}

调用:head = insertAtTop(head, value);

node* insertAtLast(node* head, int value){
node* original_head = head;
while(head->next!=NULL){
head=head->next;
}
node*temp=new node();
temp->data=value;
temp->next=NULL;
head->next=temp;
return original_head;
}

调用:head = insertAtLast(head, value);

关于c++ - 为什么需要双指针来更改头部而不是链接列表中的其他地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com