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

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

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

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

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

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

2个回答

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

而插入并不改变指向

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐