gpt4 book ai didi

c - 使用递归算法反转链表

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:24 25 4
gpt4 key购买 nike

我无法理解反转链表的算法如何修复头指针。

void recursiveReverse(struct node** head_ref)
{
struct node* first;
struct node* rest;

/* empty list */
if (*head_ref == NULL)
return;

/* suppose first = {1, 2, 3}, rest = {2, 3} */
first = *head_ref;
rest = first->next;

/* List has only one node */
if (rest == NULL)
return;

/* reverse the rest list and put the first element at the end */
recursiveReverse(&rest);
first->next->next = first;

/* tricky step -- see the diagram */
first->next = NULL;

/* fix the head pointer */
*head_ref = rest;
}

在那之前我都明白了,这是我不明白的最后一行。
如果列表是1->2->3。所以,recursiveReverse(2) 会将 *head_ref 设置为 3。但是当它返回到 recursiveReverse(1) 时,这里的 rest 指向 2。所以不应该将 *head_ref 设置为 2,(这是不正确的)但它不会实际上。这是如何工作的?

最佳答案

当调用 recursiveReverse(2) 时,recursiveReverse(1) 传递一个 reference 给 rest,recursiveReverse(2) 修改为指向 3。然后当 recursiveReverse(1) 设置 * head_ref = rest; rest 实际上指向 3。

关于c - 使用递归算法反转链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283486/

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