@Override
  public @NotNull Iterator<E> iterator() {
    return new Iterator<E>() {

      private FList<E> list = FList.this;

      @Override
      public boolean hasNext() {
        return list.size() > 0;
      }

      @Override
      public E next() {
        if (list.size() == 0) throw new NoSuchElementException();

        E res = list.myHead;
        list = list.getTail();
        assert list != null;

        return res;
      }

      @Override
      public void remove() {
        throw new UnsupportedOperationException();
      }
    };
  }
@Override
  public @NotNull Iterator<E> iterator()