所以我想更好地理解LinkedLists,并且练习告诉我为我编写的链表类的迭代器类的方法添加remove()
。 我的迭代器类看起来是这样的:LinkedList迭代器类的remove()
public java.util.Iterator<T> iterator() {
return new java.util.Iterator<T>() {
Node prev= null,curr = head;
public boolean hasNext() {
if (curr != null) {
return true;
}
return false;
}
public T next() {
T temp = curr.data;
prev = curr;
curr = curr.next;
return temp;
}
public void remove() {
if(prev==null || curr==null)
head=head.next;
else
prev.next=curr.next;
}
};
}
而且,我写它的测试去有点像这样:
public void testiterator(){
BasicLinkedList<String> basicList = new BasicLinkedList<String>();
basicList.addToFront("Blue").addToEnd("Red").addToFront("Yellow");
for(Iterator<String> i = basicList.iterator(); i.hasNext();){
if(i.next().equals("Blue"))
i.remove();
}
assertTrue(basicList.toString().equals("\" Yellow Red \""));
}
然而,当,当我打印basicList,它告诉我,该列表包含黄色和蓝色而不是黄色和红色。我是否执行了remove()
方法错误,我是否使用了错误,或者两者都有?
感谢您的时间家伙!
这几乎是加强我的想法发生了什么。我通过添加第三个称为prevOriginal的节点来修复我的代码。当next()被称为prevOriginal = prev之前,任何事情都被设置为下一个。然后在删除我用prevOriginal.next = prev.next正确地移动列表。原油我知道,但我想它的工作原理:\ 谢谢! – CoderNinja 2013-03-06 22:06:00