public class LinkedList {
private class Node {
E e;
Node next;//指向下一个元素节点的引用
//构造方法
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();
}
}
private Node dummyhead;//虚拟头节点
private int size;
//构造方法
public LinkedList() {
dummyhead = new Node(null,null);
size = 0 ;
}
//获取链表大小
public int getSize() {
return size;
}
public boolean isEmpty() {
return size ==0;
}
//向链表首位置添加元素
public void addFirst(E e) {
// Node node = new Node(e,null);//构造新增节点
// node.next = head;
// head = node;
// dummyhead = new Node(e,dummyhead);
// size++;
add(0, e);
}
//向链表末尾位置添加元素
public void addLast(E e) {
add(size, e);
//size++;
}
//向链表0~based 区间添加元素
public void add(int index,E e) {
if(index<0 || index>size) {
throw new IllegalArgumentException("index error!");
}
//定义用于记录新增元素的前一个元素
Node prev = dummyhead;
//使用虚拟头节点优化了此代码
// if(index==0) {
// addFirst(e);
// }
//循环遍历
for(int i=0 ;i