gpt4 book ai didi

c - 在链表中插入节点

转载 作者:行者123 更新时间:2023-11-30 20:53:37 24 4
gpt4 key购买 nike

我有一个练习,要求我创建一个函数,将新节点中的数字添加到基于包含一个整数的结构的链表的头部。这是结构:

struct Node
{
int data;
struct Node *next;
};

到目前为止没问题。所以我创建了一个需要两个参数的函数:要添加的整数和指向链表头部的指针,但它不起作用。这是我的代码:

void push(struct Node* head, int new_data)
{
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));

new_node->data = new_data;

new_node->next = head;

head = new_node;
}

所以,我所做的是让 new_node 指向 head 指向的同一个节点,之后我让新节点成为链接的新头列表。这看起来很合乎逻辑,尽管它不起作用。另一方面,当我为函数提供 head 指针的地址而不是指针本身时,它确实可以工作:

void push(struct Node** head_ref, int new_data)
{
/* 1. allocate node */
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));

/* 2. put in the data */
new_node->data = new_data;

/* 3. Make next of new node as head */
new_node->next = (*head_ref);

/* 4. move the head to point to the new node */
(*head_ref) = new_node;
}

这是带有双**的函数的主要内容:

int main()
{
struct Node* head = NULL;
push(&head,7);
push(&head,6);
push(&head,3);
return 0;
}

我知道第二个函数应该可以工作,但我不明白为什么有必要使用head的地址而不是head本身。如果有人能向我解释原因,我将很高兴,谢谢。

最佳答案

but I don't see why it is necessary to use the adress of head and not head itself.

简单来说代码中不能有引用(与 C++ 不同),而只能有指针。

存储在 head 指针变量中的值应该在对 push() 的调用中更改,因此您需要传递 head 的地址 变量来更改(单个 * 指针)值。

int main()
{
struct Node* head = NULL;
push(&head,7);
// ...
}
<小时/>
void push(struct Node** head_ref, int new_data)
{

// ...

/* 3. Make next of new node as head */
new_node->next = (*head_ref); // Dereferencing head_ref yields the current
// content of head

/* 4. move the head to point to the new node */
(*head_ref) = new_node; // Store the newly allocated memory address
// into the head pointer
}
<小时/>

当您标记您的问题时最初,使用 C++ 代码不需要这样做。

您也可以通过引用获取指针参数:

void push(struct Node*& head_ref, int new_data)
// ^
{
// ...

/* 3. Make next of new node as head */
new_node->next = head_ref;

/* 4. move the head to point to the new node */
head_ref = new_node; // <<<<<<<<<<
}
<小时/>
int main() {
struct Node* head = nullptr;
push(head,7);
push(head,6);
push(head,3);
return 0;
}

关于c - 在链表中插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145033/

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