哑元

处理链表问题有时候会用到哑元。那么什么时候需要哑元什么时候可以不需要呢?
当处理head节点和处理其余节点需要用到不同做法时(因为head前面没有节点),为了统一做法需要用到哑元。

以链表节点顺序交换问题为例:
链表节点顺序交换问题一般需要三个指针
(1)两两交换问题
24.两两交换链表中的节点
模型:pre->l1->l2->rest (l1,l2为待交换的两个结点)
很明显,交换头两个节点和交换其它相邻两个节点用到的方法是不同的,因而需要用到哑元。如果不用哑元而交换头两个节点又用相同方法,则由于待交换节点是从头两个节点开始的,而head之前又没有节点,那么pre就没有意义。
(2)链表反转问题
206.反转链表
只需要将操作节点插入到head之前即可,根本不需要操作head,因此不需要用到哑元。

总结上述问题也可以得到另一种角度的解释:当操作节点从head开始,而进行操作时又需要用到操作节点的前一个节点pre时,此时为了使pre有意义需要用到哑元。

原文地址:https://www.cnblogs.com/Frank-Hong/p/13488339.html