我试着去理解下面的代码:传递指针地址在递归函数在C
void recursiveReverse(struct node **head_ref)
{
struct node *first;
struct node *rest;
if (*head_ref == NULL)
return;
first = *head_ref;
rest = first->next;
if (rest == NULL)
return;
recursiveReverse(&rest);
first->next->next = first;
first->next = NULL;
*head_ref = rest;
}
我注意到变量rest
是具有用于所有的递归调用相同的值,一旦代码超越recursiveReverse(&rest)
达到。但first->next
有不同的值。我能够理解为什么first->next
通过将它们写入堆栈并将它与每个调用进行比较而具有不同的值。但我无法理解rest
对于所有呼叫的值是多少,而不是来自堆栈的(rest = first->next)
。如果问题不清楚或需要任何细节,请告诉我。 感谢
更新:我注意到,妥善安排参数,如果我叫recursivereverse(休息),而不是revursivereverse(&休息),对于每一个递归调用就像revursion堆栈上的任何其他变量,其余值的变化。我不明白休息在通话中有什么不同&。
执行'recursiveReverse(&rest);'''执行后,列表几乎相反,此时'rest'指向列表的最后一项,无论递归中的嵌套层次如何,它都是相同的 – 2014-12-06 06:51:07