我有以下代码迭代地反转链表。
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;
以便修改列表节点的实际地址?