双向链表上的 Java 迭代器

Posted

技术标签:

【中文标题】双向链表上的 Java 迭代器【英文标题】:Java Iterator on Doubly-linked-list 【发布时间】:2015-07-13 13:05:24 【问题描述】:

您好,我是 Java 新手,在为 双链表 构建嵌套迭代器类时遇到了这个问题。我不知道如何编写 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

【问题讨论】:

【参考方案1】:

试试这个:

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;

也删除lastindex,你不需要它们。

【讨论】:

顺便说一句,字段名称current 在我的解决方案中不正确。如果您接受我的解决方案,请将其重命名为 nextcursor【参考方案2】:
 public E next() 
        if (!hasNext()) throw new NoSuchElementException();
             current = current.next;
    return current;
    

【讨论】:

【参考方案3】:

你可能想看看 java.util.LinkedList :

From Documentation:

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();

【讨论】:

以上是关于双向链表上的 Java 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

List双向链表容器

循环双向链表 ListIterator

Java中双向链表的代码实现

我在自己写一个STL,其中的list使用双向链表的,谁能帮我写一个迭代器。

python实现双向链表

C++ STL list详解