public boolean offer(E e) {
return add(e);
}
public boolean offerFirst(E e) {
addFirst(e);
return true;
}
public boolean offerLast(E e) {
addLast(e);
return true;
}
public boolean add(E e) {
linkLast(e);
return true;
}
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++;
modCount++;
}
private void linkFirst(E e) {
final Node<E> f = first;
final Node<E> newNode = new Node<>(null, e, f);
first = newNode;
if (f == null)
last = newNode;
else
f.prev = newNode;
size++;
modCount++;
}

  offer(E)将元素添加到链表的末尾;offerFirst(E)将元素添加到元素首部,offerLast(E)方法作用和offer(E)是一样的。
  K:push(E)
  public void push(E e) {
  addFirst(e);
  }
  public void addFirst(E e) {
  linkFirst(e);
  }
  private void linkFirst(E e) {
  final Node<E> f = first;
  final Node<E> newNode = new Node<>(null, e, f);
  first = newNode;
  if (f == null)
  last = newNode;
  else
  f.prev = newNode;
  size++;
  modCount++;
  }
  将元素插入到头部,没什么好说的。
  l:pop()