gpt4 book ai didi

java - Deque 实现中的 addFirst() 方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:02 25 4
gpt4 key购买 nike

我正在尝试使用链表在 java 中实现双端队列。作为开始,我想实现方法 addFirst()。这是我遇到的问题——当我添加几个字符串时,例如“一”、“二”和“三”,它插入正确,但在迭代双端队列时,它只给出最后添加的对象,不是所有的对象。有什么我想念的吗?

public class Deque<Item> implements Iterable<Item> {
private Node first;
private Node last;
private int N;

public Iterator<Item> iterator() { return new DequeIterator(); }

private class Node {
private Item item;
private Node next;
}

public Deque() {
first = null;
last = null;
N = 0;
}

public boolean isEmpty() { return first == null || last == null; }
public int size() { return N; }

public void addFirst(Item item) {
if (null == item) { throw new NullPointerException("Can not add a null value"); }
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = null;

if (isEmpty()) {
last = first;
} else {
oldFirst.next = first;
}

N++;
}

private class DequeIterator implements Iterator<Item> {
private Node current = first;

public boolean hasNext() { return current != null; }
public void remove() { throw new UnsupportedOperationException(); }

public Item next() {
if (!hasNext()) { throw new NoSuchElementException(); }
Item item = current.item;
current = current.next;
return item;
}

}

public static void main(String args[]) {
Deque<String> deque = new Deque<String>();
deque.addFirst("one");
deque.addFirst("two");
deque.addFirst("three");
deque.addFirst("four");

for (String s : deque) {
System.out.println(s); // prints only "four"
}
}
}

最佳答案

addFirst() 中将 oldFirst.next = first 更改为 first.next = oldFirst,它应该可以工作。

addFirst() 调用之后的 first.next 没有指向任何内容,因为您将其设置为 null。这会导致 hasNext() 方法返回 false,从而导致无效迭代。

关于java - Deque 实现中的 addFirst() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18815697/

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