前言
前几日有个学妹来问一道题(回文链表),我给了一段示例代码,介绍了一下哨兵思想,但学妹似乎还有疑问。谷歌找了相关资料,但资料相对比较零散,索性自己整理了相关的资料,聊聊哨兵思想及其应用。

哨兵思想
起源
哨兵思想的起源已经无从得知,但它最早可以追溯到上世纪 60 年代。在那时候,人们已经开始使用哨兵(sentinel)来简化链表的实现。哨兵是指在链表中插入一个节点,用于标记链表的开头或结尾。
定义
哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。
假设你是一名守卫,你的任务是在一个城市的城门处保卫城市,防止有人进入或离开城市。你的城市有很多城门,你需要站在城门处,监视每个人是否进入或离开城市。

为了方便起见,你决定设置一个哨兵,来帮助你监视所有城门。哨兵可以在城门处站岗,当有人进入或离开城市时,哨兵会立即告诉你。这样,你就不必在每个城门处都站岗,而只需要在哨兵处站岗即可。
在这个例子中,哨兵就是在链表中的哨兵,它的作用是帮助监视所有城门(也就是链表中的所有节点)。通过使用哨兵,你(也就是程序)可以更方便地监视所有城门,而不必在每个城门处都站岗(也就是在每个节点处进行特殊处理)。例如,在某些数据结构中,可能需要使用哨兵值来标识链表的结尾或空值。在这种情况下,哨兵值可以用来避免在每次操作中进行空值检查。这样可以提高程序的效率,同时也可以简化代码的实现。
哨兵思想也可以用于其他数据结构中,例如数组和树结构。在这些情况下,哨兵值可以用来标识数组边界或树中的特殊节点。
以下是利用哨兵思想解决问题