如图,为什么单链表初始化需要二级指针,而单链表的插入操作不用二级指针?

如图图片说明,创建单链表时形参head设计成二级指针类型,是因为要改变头指针指向(对吗?)。

而单链表的插入操作同样需要改变指针指向,为什么不需要用二级指针?图片说明

是因为不需要改变头指针指向所以不用传址吗?

下面这个问题就显示了我的彻底混乱:那为什么插入操作函数里面的指针P改变了指向却不用定义为二级指针类型(这么说对吗)?图片说明

本来在链表之前我还是会用指针的,一到链表,还加了个二级指针,我就懵了。问题也很混乱,希望有大佬能指导一下。

SLNode **head 作为形参,当调用函数时,先对head中存放的地址进行拷贝,再对该拷贝值进行后续的操作:*head=malooc(sizoof())。
代码表示对拷贝值解引用,去到下一级内存中存放堆内存的地址。当函数调用结束时,拷贝值被回收,但此时拷贝值指向的内存中已经成功放入地址。
在插入函数中,形参为SLNode *head ,表示对二级指针head解引用一次,去到下一级内存(此时内存中是之前通过拷贝值放入的堆内存地址),对内存中的地址同样进行一次拷贝。利用此次的拷贝值,去到堆内存中修改数据,和修改next指针。同样在插入函数调用结束后,拷贝值被回收,但是拷贝值指向的
堆内存内容已经成功修改了。
这是我自己的理解,参考一下,如果有理解不到位还请指出,互相学习

你好,请问这是哪一版的数据结构,可以回复一下吗

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

因为初始化的时候,需要改变这个指针的指向
SLNode * list = NULL; //指向 NULL
ListIntiate(list);
//此时list指向有效内存了

而插入并不改变指向