我有专家的简单指针问题。 此函数创建链接列表的副本。 最后一行,它是copyLinkedList的递归调用。 我无法弄清楚指针指向我放置的指针?
我怎样才能轻松理解这个复杂的指针呢? (对我来说仍然很难)
*谢谢*
void copyLinkedList(struct Node *node, struct Node **ppNode)
{
if (node){
*ppNode = new Node;
(*ppNode)->data = node->data;
(*ppNode)->next = NULL;
copyLinkedList(node->next, ?? );
}
}
答案 0 :(得分:1)
好吧,你想把指针传递给(*ppNode)->next
:
copyLinkedList(node->next, &(*ppNode)->next);
答案 1 :(得分:0)
将指针(单个)传递给函数时,它是按值传递的。所以,你基本上有一个传递给函数的指针的副本,如果你修改它,它不会改变传入的原始指针 - 调用者永远不会看到它。
如果传递指向指针的指针,则可以取消引用它,这样可以更改调用者传入的原始指针。
在你的情况下,* ppNode = new Node;为用户传入的指针指定一个新节点(即指向指针的指针指向)...我知道,这听起来很糟糕 - 但你可以把它画出来并且它是有意义的。
将新指针的数据和下一个值设置为原始列表中的值。现在你想继续下一个元素。因此,您将递归调用原始列表的下一个元素,以及您正在创建的新列表的下一个元素。所以,你想传入一个指向你刚刚创建的元素的“下一个”指针的指针。
->next
成员。所以,&(*ppNode)->next
- @StenSoft已经提供了完整的电话。