双向链表上的 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;
也删除last
和index
,你不需要它们。
【讨论】:
顺便说一句,字段名称current
在我的解决方案中不正确。如果您接受我的解决方案,请将其重命名为 next
或 cursor
。【参考方案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 迭代器的主要内容,如果未能解决你的问题,请参考以下文章