4.3 为链表设置虚拟头结点dummyhead

 

链表设置虚拟头结点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     }

 

posted @ 2019-01-25 21:54  靖愁  阅读(1440)  评论(2编辑  收藏  举报