链表简单实现
public class LinkedList<E> {
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.prev = prev;
this.next = next;
}
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null) {
first = newNode;
} else {
l.next = newNode;
}
size++;
}
Node<E> node(int index) {
Node node = first;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node;
}
E get(int index) {
return node(index).item;
}
boolean add(E e) {
linkLast(e);
return true;
}
void remove(int index) {
Node node = node(index);
Node prev = node.prev;
Node next = node.next;
if (prev == null) {
first = next;
} else {
prev.next = next;
node.prev = null;
}
if (next == null) {
last = prev;
} else {
next.prev = prev;
node.next = null;
}
size--;
node.item = null;
}
void printAll() {
for (Node<E> node = first; node != null; node = node.next) {
System.out.println(node.item);
}
}
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.printAll();
System.out.println("================");
System.out.println(list.get(3));
System.out.println("================");
list.remove(1);
list.printAll();
}
}
输出结果:
aaa
bbb
ccc
ddd
ddd
aaa
ccc
ddd