Asp*_*nt9 1 c c++ function linked-list
我最近一直在研究链表和树.但我不确定何时声明一个函数:
preorder(struct node* root);
or
preorder(struct node** root);
Run Code Online (Sandbox Code Playgroud)
当两者的工作完全相同时.更确切地说,我必须将我的函数设计为双指针和单指针.
谢谢.
PS:在链表中插入一个节点需要有双指针,如:
insert(struct node** root,int value);
Run Code Online (Sandbox Code Playgroud)
除非将根节点定义为全局值.虽然预订顺序适用于单个指针.如果有人能够以此为例进行解释,那将非常有帮助.
这取决于什么preorder().如果它在不修改列表/树的情况下打印一些内容,则只需要一个指针.如果有可能必须替换根,则需要双指针.
这是因为参数是通过C中的值传递的.如果原始变量的副本传递给您的函数,则无法修改它:
int inc(int x)
{
x = x + 1; // this will never work
}
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,你可以传入该参数的地址(指向它的指针),而不是传入参数.然后,该函数可以取消引用指针并修改它指向的值.
// usage: inc(&x) where x is an int
int inc(int *ptr)
{
*ptr = *ptr + 1; // this will work
}
Run Code Online (Sandbox Code Playgroud)
使用列表/树,您已经在使用指针.这允许您访问和修改指向对象(例如,获取/设置next根成员),但不允许您修改指针本身(例如,用不同的节点替换根).为此,需要引入另一个级别,因此指向节点的指针.