我一直关注的用于学习数据结构的书使用“单指针”作为函数中的参数,这些函数在链表中的不同位置添加新节点,例如在开始时,在结束时。同样在删除的情况下使用“指向指针”。在所有这些情况下,函数原型看起来像:
void appendordelete (struct node **, int );
但是在没有计算节点的函数中,显示列表并在某个位置后添加,函数原型变为:
void anyofthementionedfunctions (struct node *, int );
所以当我在链表操作中使用单指针和指针指针时,我很困惑。请澄清。这些函数以典型和理想的方式工作,因此我不会发布这些冗长函数的编码。
答案 0 :(得分:2)
在这种情况下,使用指向指针的指针,以便可以将指针更改为第一个节点。你保留一个指向列表开头的指针。如果添加新项目,则可能需要更改该指针,因为新项目可能会添加到列表的开头。
void insertAtBeginning(struct node **first_ptr,int value)
{
struct node *first = malloc(sizeof(struct node));
first->value = value;
first->next = *first_ptr;
*first_ptr = first;
}
void test()
{
struct node *first = 0;
insertAtBeginning(&first,5);
freeAll(first);
}
如果您正在搜索列表,则无需更改指向第一个节点的指针,因此无需将指针传递给指针。
但请注意,指针指针还有其他用途。例如,您可以将矩阵维护为指向行指针数组的指针。