Java Iterator в двусвязном списке

Привет, я новичок в Java, и у меня возникла проблема с построением вложенного класса Iterator для двусвязного списка. Я не знал, как написать public E next() метод, чтобы он проходил через двусвязный список.

Любая помощь приветствуется!

  private class DoubleListIterator implements Iterator<E> {
    // instance variable
    private Node current=head;
    private Node last;
    private int index=0;

    public boolean hasNext() {
      return index < N;
    }
    public E next() {
        if (!hasNext()) throw new NoSuchElementException();

    }
    public void remove() { throw new UnsupportedOperationException(); }
  }// end class ListIterator

person Robert    schedule 04.05.2015    source источник


Ответы (2)


Попробуй это:

public boolean hasNext() {
  return current != null;
}
public E next() {
    if (!hasNext()) throw new NoSuchElementException();
    E tmp = current.item;
    current = current.next;  // if next is null, hasNext will return false.
    return tmp;
}

Также бросьте last и index, они вам не нужны.

person Grim    schedule 04.05.2015
comment
Кстати, имя поля current неверно в моем решении. Переименуйте его в next или cursor, если вы принимаете мое решение. - person Grim; 04.05.2015

вы можете взглянуть на java.util.LinkedList:

Из документации:

Реализация двусвязного списка интерфейсов List и Deque. Реализует все необязательные операции со списком и разрешает все элементы (включая null). Все операции выполняются так, как и следовало ожидать от двусвязного списка. Операции, которые индексируют список, будут перемещаться по списку от начала или до конца, в зависимости от того, что ближе к указанному индексу.

LinkedList<String> linkedlist = new LinkedList<String>();

     //add(String Element) is used for adding

     linkedlist.add("Item1");
     linkedlist.add("Item5");
     linkedlist.add("Item3");

      /*Add First and Last Element*/

     linkedlist.addFirst("First Item");
     linkedlist.addLast("Last Item");

     //you can get the iterator by 
     ListIterator<String> it = linkedlist.listIterator();
person BH-Ayb    schedule 04.05.2015