public E remove(int index) {
checkElementIndex(index);
return unlink(node(index));
}
E unlink(Node<E> x) {
// assert x != null;
final E element = 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--;
modCount++;
return element;
}

????????????????????????ж??????????λ???????????????unlink(Node)????????????????unlink()?????????????????????????????????????е???????????????????????y??????????????????????????????????????y?????????????next;????????????????????????????y?????????????????????y??????????????????????????β??????????????????????????????????????????????????y???????????????????y??????????????????null??????????????????
????f:peek()
????public E peek() {
????final Node<E> f = first;
????return (f == null) ? null : f.item;
????}
???????????????????????ж??????????????????????????
????g:element()
????public E element() {
????return getFirst();
????}
????public E getFirst() {
????final Node<E> f = first;
????if (f == null)
????throw new NoSuchElementException();
????return f.item;
????}
???????????????????
????h:poll()
????public E poll() {
????final Node<E> f = first;
????return (f == null) ? null : unlinkFirst(f);
????}
????private E unlinkFirst(Node<E> f) {
????// assert f == first && f != null;
????final E element = f.item;
????final Node<E> next = f.next;
????f.item = null;
????f.next = null; // help GC
????first = next;
????if (next == null)
????last = null;
????else
????next.prev = null;
????size--;
????modCount++;
????return element;
????}
????????????????????????????unlinkFirst(Node)?????????????????????????????????????????????????
????i:remove()
????public E remove() {
????return removeFirst();
????}
????public E removeFirst() {
????final Node<E> f = first;
????if (f == null)
????throw new NoSuchElementException();
????return unlinkFirst(f);
????}
??????poll()?????к?????????
????j:offer(E)