我試着去理解下面的代碼:傳遞指針地址在遞歸函數在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