public class DoubleLink<E> {
private Node<E> first;
private Node<E> last;
private int size;
public boolean add(E e) {
if (e == null) {
return false;
}
if (first == null) {
first = new Node(e);
first.prev = first;
first.next = first;
last = first;
} else {
Node n = new Node(e);
n.prev = last;
n.next = first;
last.next = n;
last = n;
}
size++;
return true;
}
public boolean remove(E e) {
if (e == null) {
return false;
}
Node n = first;
do {
if (n.t.equals(e)) {
n.prev.next = n.next;
n.next.prev = n.prev;
size--;
return true;
}
if (n.next != null) {
n = n.next;
}
} while (n != first);
return false;
}
public E next(E e) {
Node n = first;
do {
if (n.t.equals(e)) {
return (E) n.next.t;
}
if (n.next != null) {
n = n.next;
}
} while (n != first);
return null;
}
public E getFirst() {
return first.t;
}
public E getLast() {
return last.t;
}
public int getSize() {
return size;
}
private class Node<T> {
private final T t;
private Node<T> prev;
private Node<T> next;
private Node(T t) {
this.t = t;
}
}
}
双向链表简单实现
最新推荐文章于 2021-08-15 10:37:23 发布