「Programming Interviews Exposed」という本から、ツリーのようなリンクされたリストシステムを平坦化する次のアルゴリズムを見ています。
void flattenList( Node *head, Node **tail)
Node *curNode = head;
while( curNode ){
/* The current node has a child */
if( curNode->child ){
append( curNode->child, tail );
}
curNode = curNode->next;
}
}
/* Appends the child list to the end of the tail and updates
* the tail.
*/
void append( Node *child, Node **tail ){
Node *curNode;
/* Append the child child list to the end */
(*tail)->next = child;
child->prev = *tail;
/*Find the new tail, which is the end of the child child
*list.
*/
for( curNode = child; curNode->next;
curNode = curNode->next )
; /* Body intentionally empty */
/* Update the tail pointer now that curNode is the new
* tail.
*/
*tail = curNode;
}
変更が持続することを確認するために関数に渡す**tail
代わりに渡していることは理解していますが、私が理解できないのは、子に対して同じことをしない理由です (つまり、の代わりに渡さないのはなぜですか)?*tail
append
*tail
**child
*child