public class LinkedList<E> extends AbstractList<E> {
private Node<E> head;
private int size;
class Node<E> {
private Node<E> next;
private E e;
Node(Node node, E e) {
next = node;
this.e = e;
}
Node(E e) {
this.e = e;
}
}
public int size() {
return size;
}
/**
* 添加元素
* @param e
* @return
*/
@Override
public boolean add(E e) {
//初始化要加入的节点
Node node = new Node<E>(e);
if (head == null) {
head = node;
return false;
}
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
size++;
return true;
}
/**
* 添加指定位置元素
* @param index 索引
* @param e 元素
*/
public void add(int index, E e) {
check(index);
Node node = new Node<E>(e);
Node<E> temp = head;
int counter = 0;
while (temp.next != null) {
counter++;
if (counter == index) {
node.next = temp.next;
temp.next = node;
return;
}
temp = temp.next;
}
size++;
}
/**
* 位置检查
* @param index
*/
public void check(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("位置不合法");
}
}
/**
* 获取指定位置元素
* @param index
* @return
*/
public E get(int index) {
Node node = head;
for (int i = 0; i <= index; i++) {
node = node.next;
if (i == index) {
return (E) node.e;
}
}
return null;
}
/**
* 删除指定位置元素
* @param index
* @return
*/
@Override
public E remove(int index) {
check(index);
Node<E> temp = head;
int counter = 0;
Node node;
while (temp.next != null) {
counter++;
if (counter == index) {
node = temp.next;
temp.next = temp.next.next;
return (E) node.e;
}
temp = temp.next;
}
size--;
return null;
}
/**
* 清空元素
*/
@Override
public void clear() {
size = 0;
head = null;
}
public void list() {
Node tmp = head;
while (tmp != null) {
System.out.print(tmp.e+" ");
tmp = tmp.next;
}
}