我们都知道,想要通过函数形参修改实参,就需要传递二级指针,而下面这个链表的尾插函数传参却并没有传递二级指针,下面我将对这个情况做些解释和自己的理解。
void text_pushback()
{
//初始化链表
Lisnode* plice = Intit();
pushback(plice, 1);
pushback(plice, 1);
pushback(plice, 1);
pushback(plice, 1);
pushback(plice, 1);
print(plice);
}
首先我们留意标题,这是个带哨兵位的双向循环链表,先解释一下哨兵位,哨兵位就是一个不存储有效数据的链表节点,我的理解就是类似一种网络接口一样,找到这个接口,并插上网线就能上网(找到数据)。
假设我们现在已经创建好了一个带哨兵位的链表,已经往里面插入了一个数据,那么这个链表的逻辑图就是类似这样
当需要改变head这个头指针的指向时,我们才需要使用二级指针。比如,现在我malloc出来一个新的空间,给这块空间命名为newnode。当我需要在函数里将head这块空间的地址指向newnode时,这时就需要使用“&”将存储head这个地址的空间的地址取出,并在函数里用二级指针接收,这样才能在函数里改变head这块空间的指向,也就是说,当我们需要改变头节点的位置时,我们才需要使用二级指针,而带哨兵位的双向循环链表中,头节点永远是哨兵位,不会改变头节点,所以不需要使用二级指针。