gpt4 book ai didi

C - 反向递归链表 : why use double pointer?

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

我理解了 struct Node *head 时的逻辑是一个全局变量。
但是,当我使用 struct Node *head 做相反的事情时作为 main() 中的局部变量,我必须使用双指针和Head的指针,我不明白我必须把它们放在哪里。

void Reverse(struct Node *Head, struct Node **headpointer) {
struct Node *first;
// when the list is empty
if (Head == NULL)
return;

first = Head;
// when there is one node left
if (first->next == NULL) {
*headpointer = first;
return;
}

Reverse(first->next, headpointer);

first->next->next = first;
first->next = NULL;
}
我不清楚为什么我必须使用...
first = Head;
*headpointer = first;
为什么我不能使用
Head = first? 
另外,如果 first = Head递归函数调用前面的行 Reverse(first->next, headpointer) ,不要 first->next值也等于 Head指向 first节点?
有没有什么好的逻辑图/图片/解释/例子可以解释这种差异?

最佳答案

I am unclear why I have to use... first = Head


实际上, first此代码中根本不需要变量。它只是 Head 的副本,所以为了简化你可以用 Head 替换变量.没有它,一切都会一样:
if (Head == NULL)
return;

if (Head->next == NULL) {
*headpointer = Head;
return;
}

Reverse(Head->next, headpointer);

Head->next->next = Head;
Head->next = NULL;

I am unclear why I have to use... *headpointer = Head

Head变量是指向要反转的链表头的指针,函数将新反转的链表头存入 *headpointer .这样做是因为 Head只是传递给 Reverse() 的指针的副本函数,所以更新它的值不会改变原来的指针;这就是为什么使用单独的双指针变量的原因。

why can't I just use Head = first?

Head是传递给函数的指针的副本。更新 Head指针不会更新您传入的原始列表指针。另外,正如我之前所说, Headfirst 相同,所以这样的任务什么都不做。

Also, if first = Head line in front of the recursive function call Reverse(first->next, headpointer), don't the first->next value also equal to Head which points to the first node?

first->next (或 Head->next )只是列表中的下一个节点。函数调用的目的是先反转列表的其余部分,然后放置 Head (或 first )在列表的末尾(这是最后两行所做的)。

关于C - 反向递归链表 : why use double pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65658039/

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