引入原因:
有头链表中,单纯的用add方法不能解决向链表头添加节点的情况。故人为地为链表头部添加一个dummyHead来解决此问题(即消除了添加节点位置前端无节点的情况
代码
package LinkedList;
public class LinkedList无头<E> {
private class Node{//用户不需要访问节点的内部结构,故用private
public E e;
public Node next;//区别于C,Java直接创建一个新的Node作为next
//Node构造函数
public Node(E e,Node next) {
this.e=e;
this.next=next;
}
public Node(E e) {
this(e,null);
}
public Node() {
this(null,null);
}
@Override
public String toString() {
return e.toString();
}
}
//构造参数head和size
private Node dummyHead;
private int size;
public LinkedList无头() {
dummyHead=new Node(null,null);//需为dummyHead创建一个Node节点
size=0;
}
//获得链表中元素个数
public int getSize() {
return size;
}
//返回链表是否为空
public boolean isEmpty() {
return size==0;
}
//在链表头添加新元素e
public void addFirst(E e) {
add(0,e);
}
//在链表中间添加元素
public void add(int index,E e) {
if(index<0||index>size) {
throw new IllegalArgumentException("Add failed.Index illegal.");
}
if(index==0)
addFirst(e);//addFirst不符合add的规律
Node prev=dummyHead;
for(int i=0;i<index;i++) {
prev=prev.next;
}
prev.next=new Node(e,prev.next);
size++;
}
//链表末尾添加新元素
public void addLast(E e) {
add(size,e);
}
}