[算法思想]:链表中加入哨兵有何作用?

引入和介绍

最近在做链表算法题目的时候,许多人都会在创建新链表的时候加入一个哨兵,那么为什么要加入这个哨兵呢?

什么是链表中的哨兵?

哨兵其实是一个解点,哨兵节点(Sentinel)是一个哑元节点,可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,它的值域并不存储任何东西,只是为了操作的方便引入的。如果一个链表中有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点。

在绝大多数情况下,链表分为带头结点的链表和不带头结点的链表,如果是处理没有带哨兵节点的链表,对第一个节点,既是头节点,没有前驱节点。如果没有做特殊处理来操作的话,那么就可能出错但是如果做特殊处理,那么就会增加代码的复杂性,还会减低程序的效率。而如果有带哨兵节点的链表,线性表的每个位置的节点都有一个前趋节点,因此可以做统一的处理。

对于空的链表,没有带哨兵节点的链表的头结点为Null,处理起来和其他情况也不同。而带了哨兵节点的链表,当其为一个空链表时,仅含哨兵节点,哨兵节点的指针域为空,和其他情况的表尾是一样的。

反思:

有带哨兵的节点的时候,对于链表的增删改都会方便许多。
对于创建一个新的链表
1、没有哨兵节点时,添加一个节点要先判断是否是第一个节点,并单独保留第一个节点的指针,以便于返回整个链表的头指针。
2、有哨兵节点时,链表头是固定的,不可能为空,后续的节点都是链接在前一个节点的,不需要单独判断是否为头节点。

对于插入一个节点
有哨兵节点时,不需要判断链表为空和插入点在第一个位置节点的情况。

对于删除指定位置的节点
有哨兵节点时,不需要判断链表为空和删除第一个位置节点的情况。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值