在看数据结构的链表一章时,一直对于链表表头这个知识点比较迷惑。
下面是链表的末尾添加一个节点的函数原型,为什么第一个形参是这样定义的?其中ListNode表示一个节点。
void AddToTail( ListNode** pHead, int value);
问题就是为什么传递一个链表的信息需要使用一个指向指针的变量?
第一个问题:问什么要使用一个指针来表示链表?
可以从反面来回答这个问题,如果不使用指针来表示链表而直接使用结点表示会怎么样?
在处理删除第一个结点或者插入第一个结点时将很麻烦,而使用指针则非常灵活,处理首结点和其他结点方法是相同的,不需要特殊处理。
第二个问题:为什么需要使用指向指针的指针来传递参数?
因为在函数过程中可能会更改表头的地址指针,如果直接传递指针的话就是按值传递,只能改变指针指向的内存值并不能改变指针本身,只有使用一个指向指针的指针来传递传递参数才能改变表头的指针。
附录:
指向指针的指针刚开始接触是很难形象的想象出来,所以我用代码实验了一下,以便帮助大家理解。