【4】单链表(有虚拟头节点)
1、虚拟头节点
📕 为了让代码更精简,统一所有节点的处理逻辑,可以在最前面增加一个虚拟头节点
🖊 头指针指向的永远是虚拟头节点
🖊 虚拟头节点不存储数据
2、构造方法
📕 在 单链表 代码的基础上需要进行修改
🖊 头指针 first
永远指向虚拟头节点,所以在 VirtualHeadLinkedList
的构造方法中要让 first
指针虚拟头节点
public VirtualHeadLinkedList() {
// 头指针指向虚拟头节点
// 虚拟头节点的next默认指向null
first = new Node<>(null, null);
}
3、node(int index) 返回索引位置的节点
🖊 该方法会返回索引位置的节点,它原本的实现思路是:若需要
index
位置的节点,则从first
头指针指向的头节点开始 next index 次🖊 加入了虚拟头节点后,就不能从
first
头指针指向的头节点开始 next index 次了,而是从虚拟头节点的 next 指向的节点开始next
/**
* 返回index索引处的节点
*/
private Node<E> node(int index) {
checkIndex(index);
// first头指针指向的是虚拟头节点
// first.next就是具体存储数据的第一个节点
Node<E> node = first.next;
for (int i