リンクされたリストを繰り返し逆にする次のコードがあります。
struct list {
int elem;
list *next;
};
/* .... */
void ReverseListIterative(list **listref)
{
list *currNode = *listref;
list *prevNode = NULL;
list *nextNode = NULL;
while(currNode) {
*listref = currNode;
nextNode = currNode->next;
currNode->next = prevNode;
prevNode = currNode;
currNode = nextNode;
}
}
コードでは、currNode、prevNode、および nextNode はすべて、ReverseListIterative() へのローカル ポインターです。元のリストがまだ変更されているのはなぜですか (より正確には、元に戻されます)。使用すべきではありませんか
list **currNode;
list **prevNode;
list **nextNode;
リストノードの実際のアドレスが変更されるように?