链表设置虚拟头结点dummyhead,这样对链表来说,第一个元素就是dummyhead的next所对应的节点元素,而不是dummyhead所对应的节点元素。
dummyhead位置所对应的元素是根本不存在的,这只是未来我们编写逻辑方便而出现的一个虚拟头结点。
dummyhead就是索引为0的这个位置的元素的前一个节点。当我们有了dummyhead后,为链表添加一个元素,就不需要对头结点进行特殊处理了,只需要找到等待添加位置的前一个位置的节点,
此时对于链表来说,所有位置都有前一个节点。
代码
之前的成员变量元素、初始化构造函数
修改后的
1 private Node dummyHead; 2 private int size; 3 4 public LinkedList(){ 5 dummyHead = new Node(); //表明,对于一个空的链表来说,是存在一个节点的,这个唯一的节点就是虚拟头结点 6 size = 0; 7 }
修改前的add函数
修改后
1 public void add(int index, E e){ 2 3 if(index < 0 || index > size) 4 throw new IllegalArgumentException("Add failed. Illegal index."); 5 6 Node prev = dummyHead;//dummyHead是0这个位置的元素前一个位置的节点 7 for(int i = 0 ; i < index ; i ++) 8 prev = prev.next; 9 10 prev.next = new Node(e, prev.next); 11 size ++; 12 }