@Override publicbooleanremove(Object o) { if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { unlink(x); returntrue; } } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { unlink(x); returntrue; } } } returnfalse; }
E unlink(Node<E> x) { finalEelement= x.item; final Node<E> next = x.next; final Node<E> prev = x.prev;
if (prev == null) { first = next; } else { prev.next = next; x.prev = null; }
if (next == null) { last = prev; } else { next.prev = prev; x.next = null; }
x.item = null; size --; return element; } @Override public E get(int index) { return node(index).item; }
@Override publicvoidprintLinkList() { if (this.size == 0) { System.out.println("链表为空"); } else { Node<E> temp = first; System.out.println("目前的列表,头节点:" + first.item + " 尾节点:" + last.item + " 整体:"); while(temp != null) { System.out.println(temp.item + ","); temp = temp.next; } System.out.println(); } } Node<E> node(int index) { // 这里是 size >> 1 是右移一位,也就是除以二,看距离头节点近还是尾节点近 if (index < (size >> 1)) { Node<E> x = first; for (inti=0; i < index; i ++) { x = x.next; } return x; } else { Node<E> x = last; for (inti= size - 1; i > index; i --) { x = x.prev; } return x; } } /* 链表节点的私有类 */ privatestaticclassNode<E> { E item; Node<E> next; Node<E> prev;