为什么需要虚拟头节点

其实整体的意义很简单。

我们在处理链表的时候,大部分情况需要从头节点开始,但是后续链表在处理时,都可以直接追溯前驱链表(比如反转链表时),但是头节点前面没有前驱节点,这样可能会造成头节点无法处理,所以我们new一个空的ListNode,让它指向头节点,因为它没有实际数据,所以不会造成干扰。

来一手借花献佛

(1)以单链表节点删除问题为例:
模型:1 -> 2 -> 3 -> 4

删除节点2,3,4,只需要遍历时保存下待删除节点的前驱节点,然后修改前驱节点的next就好了,可是删除首元节点1时还需要判断是否是该节点是否是head指向的节点,如果是就还要移动head指针指向新的首元节点.

dummy -> 1 -> 2 -> 3 -> 4

而引入了哑元节点,对于1的删除也可以和后面的2,3,4的操作一样了,这样可以不用做边界条件判断

(2)以链表节点顺序交换问题为例:
链表节点顺序交换问题一般需要三个指针。

参考文章:https://www.cnblogs.com/trmbh12/p/17792666.html

 

目前有印象的复习到的题是力扣反转链表Ⅱ

https://leetcode.cn/problems/reverse-linked-list-ii/description/

版权声明:
作者:Paul
链接:https://www.15ivyy.site/index.php/2024/12/05/wsmxyxntjd/
来源:somethingFromPaul
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>