gpt4 book ai didi

java - LinkedList 的迭代器类的 remove()

转载 作者:行者123 更新时间:2023-11-30 11:35:09 25 4
gpt4 key购买 nike

所以我试图更好地理解 LinkedLists,一个练习告诉我为我编写的链表类添加迭代器类的 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() 方法,我是否使用错误,或两者都有?

感谢您抽出宝贵时间!

最佳答案

问题是 curr 不是指返回的最后一个元素,而是指要返回的下一个元素。

remove() 用于删除前者,而您的方法删除后者。

关于java - LinkedList 的迭代器类的 remove(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com