美文网首页
单链表头节点的作用

单链表头节点的作用

作者: CodeCompiler | 来源:发表于2019-12-19 16:45 被阅读0次

转载:小星雪
单链表为什么要设置头结点

问题:在单链表中使用“头结点”,这个哑结点始终是链表的第一个元素,这个技巧的利与弊?

链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须从头指针开始进行了。之后的每一个结点,其实就是上一个的后继指针指向的位置。
链表中第一个结点的存储位置叫做头指针
头指针和头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。
如果链表有头结点,那么头指针就是指向头结点数据域的指针。

image

单链表也可以没有头结点,没有头结点的单链表

image
  • 头结点是为了操作的统一与方便而设立的,放在第一个元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等)。
  • 有了头结点后,对在第一个元素结点前插入结点和删除第一个结点,其操作与对其它结点的操作统一了。
  • 首元结点也就是第一个元素的结点,它是头结点后边的第一个结点。
  • 头结点不是链表所必需的
  • 在线性表的链式存储结构中,头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。
  • 头指针具有标识作用,故常用头指针冠以链表的名字。
  • 无论链表是否为空,头指针均不为空,头指针是链表的必要元素

为了使空链表与非空链表处理一致,我们通常设一个头结点。

一、两者区别:
1、不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,这增加了程序的复杂性和出现bug的机会,因此,通常
在单链表的开始结点之前附设一个头结点。
2、带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,否则将导致内存访问失败或异常。
3、带头结点与不带头结点初始化、插入、删除、输出操作都不样,在遍历输出链表数据时,带头结点的判断条件是while(head->next!=NULL),
而不带头结点是while(head!=NULL),虽然头指针可以在初始时设定,但是如1所述,对于特殊情况如只有一个节点会出现问题。

作者:小星雪
链接:https://www.jianshu.com/p/580ddaca13d5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 链表-有序单链表合并

    先简单写一下单链表的几个点单链表有带表头节点和不带表头节点两种1)带表头节点 2)不带表头节点 往往使用带表头的会...

  • 单链表头节点的作用

    转载:小星雪单链表为什么要设置头结点 问题:在单链表中使用“头结点”,这个哑结点始终是链表的第一个元素,这个技巧的...

  • 数据结构与算法第二讲:[单向循环链表]

    单向循环链表 单向循环链表:单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链...

  • 单向链表

    单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针。 单链表的示意图如下: 表头为空,表...

  • 237. Delete Node in a Linked Lis

    删除链表中的节点,用于删除单链表中某个特定节点。在设计函数时需要注意,无法访问链表头节点head,只能直接访问要被...

  • c语言创建单链表两种方法的区别与联系

    单链表: NO.1 头插法 每次从表头插入新节点,具体过程:先开辟表头指针,然后陆续为每个数据元素开辟存储空间并赋...

  • 删除单链表倒数第n个节点

    基本问题 如何删除单链表中的倒数第n个节点? 常规解法 先遍历一遍单链表,计算出单链表的长度,然后,从单链表头部删...

  • 372. 在O(1)时间复杂度删除链表节点

    给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 Linked l...

  • JS问题总结

    1、作用域链 当定义一个函数时,它实际上创建了一个作用域节点,该节点上存储着当前作用域中的局部变量,并且该节点会挂...

  • 372. 在O(1)时间复杂度删除链表节点

    描述 给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 样例 Li...

网友评论

      本文标题:单链表头节点的作用

      本文链接:https://www.haomeiwen.com/subject/zyxvnctx.html