// 删除并返回链表的第一个元素 public E removeFirst() { final Node<E> f = first; if (f == null) thrownewNoSuchElementException(); returnunlinkFirst(f); }
// 删除并返回链表的最后一个元素 public E removeLast() { final Node<E> l = last; if (l == null) thrownewNoSuchElementException(); returnunlinkLast(l); }
// 删除链表中首次出现的指定元素,如果不存在该元素则返回 fals public boolean remove(Object o) { // 如果指定元素为 null,遍历链表找到第一个为 null 的元素进行删除 if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { unlink(x); returntrue; } } } else { // 如果不为 null ,遍历链表找到要删除的节点 for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { unlink(x); returntrue; } } } returnfalse; }
// 删除链表指定位置的元素 public E remove(int index) { // 下标越界检查,如果越界就抛异常 checkElementIndex(index); returnunlink(node(index)); }
E unlink(Node<E> x) { // 断言 x 不为 null // assert x != null; // 获取当前节点(也就是待删除节点)的元素 final E element = x.item; // 获取当前节点的下一个节点 final Node<E> next = x.next; // 获取当前节点的前一个节点 final Node<E> prev = x.prev;