gpt4 book ai didi

Java - 自定义迭代器无法跟踪自定义链表的头部

转载 作者:行者123 更新时间:2023-11-30 06:54:40 24 4
gpt4 key购买 nike

这些类(class)还没有完成,但这是我目前所掌握的,我希望下面的测试能够通过。

public class LinkedList<T> extends AbstractSequentialList<T> {
private Node<T> head;

@Override
public boolean add(T element) {
if(head == null) {
head = new Node(element);
}
return true;
}

@Override
public ListIterator<T> listIterator(int index) {
return new LinkedListIterator<>();
}

@Override
public int size() {
return 0;
}

private class LinkedListIterator<T> implements ListIterator<T> {
private Node<T> current;

public LinkedListIterator() {
current = (Node<T>) head;
}

@Override
public boolean hasNext() {
return (current != null && current.getNext() != null)? true : false;
}

@Override
public T next() {
return null;
}
}
}

这是 Node 类。

public class Node<T> {

private T value;
private Node next;

public Node(T value) {
this.value = value;
}

public Node(T value, Node next) {
this.value = value;
this.next = next;
}

public T getValue() {
return value;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}
}

我的迭代器测试是这样的。

LinkedList<String> list;
ListIterator<String> iterator;

@Before
public void setUp() throws Exception {
list = new LinkedList<>();
iterator = list.listIterator();
}

@Test
public void testHasNext() throws Exception {
assertThat(iterator.hasNext(), is(false));

list.add("Hello World");
assertThat(iterator.hasNext(), is(true));
}

但是,我在第二个断言上失败了。我的问题是迭代器中的“当前”指针始终为空,即使我将它设置为封闭的 LinkedList 类的头部。我怎样才能解决这个问题?谢谢。

最佳答案

看起来 current 的值是在 LinkedListIterator 的构造函数中设置的。

在您将元素添加到列表后,它还没有更新。这似乎是你的问题。

关于Java - 自定义迭代器无法跟踪自定义链表的头部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36171268/

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