链表表头和指向指针的指针

 在看数据结构的链表一章时,一直对于链表表头这个知识点比较迷惑。

下面是链表的末尾添加一个节点的函数原型,为什么第一个形参是这样定义的?其中ListNode表示一个节点。

void AddToTail( ListNode** pHead, int value);

问题就是为什么传递一个链表的信息需要使用一个指向指针的变量?

第一个问题:问什么要使用一个指针来表示链表?


 链表示意图

可以从反面来回答这个问题,如果不使用指针来表示链表而直接使用结点表示会怎么样?

在处理删除第一个结点或者插入第一个结点时将很麻烦,而使用指针则非常灵活,处理首结点和其他结点方法是相同的,不需要特殊处理。

第二个问题:为什么需要使用指向指针的指针来传递参数?

因为在函数过程中可能会更改表头的地址指针,如果直接传递指针的话就是按值传递,只能改变指针指向的内存值并不能改变指针本身,只有使用一个指向指针的指针来传递传递参数才能改变表头的指针。

附录:

指向指针的指针刚开始接触是很难形象的想象出来,所以我用代码实验了一下,以便帮助大家理解。


 代码


 示意图
 执行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,533评论 0 6
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,337评论 0 25
  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 4,290评论 4 12
  • 本文内容取自于小甲鱼的数据结构与算法。http://www.jianshu.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 2,929评论 0 7
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 1,475评论 1 3