为什么我的双向链表迭代器打印 null?
Why does my doubly linked list iterator print null?
我写了一个方法,将一个项目添加到双向链表的前面。每次我调用该函数时,它都应该添加通过它的项目。该函数按预期工作,除了当我遍历双向链表并打印每个项目时,它总是在最后打印两次 null
。我的代码如下。
public Deque() {
first = new Node();
last = new Node();
first.next = last;
last.prev = first;
}
public void addFirst(E item) {
if (item.equals(null)) {
throw new NullPointerException();
} else {
if (first.equals(null) && last.equals(null)) {
first = new Node();
first.next.item = item;
first.next.next = null;
last = first;
} else {
Node node = new Node();
node.item = item;
node.next = first;
first = node;
}
}
N++;
}
public static void main(String[] args) {
Deque<Integer> lst = new Deque<Integer>(); // empty list
lst.addFirst(1);
lst.addFirst(5);
lst.addFirst(7);
lst.addFirst(9);
Iterator<Integer> it = lst.iterator(); // tests iterator method
while (it.hasNext()) {
Integer val = it.next();
System.out.println(val);
}
}
该代码打印:9, 5, 7, 1, null, null
。我不知道正在打印两个额外的空值。谁能告诉我如何修复我的代码,使其不会在最后打印两次 null
?
您正在创建两个名为 first
和 last
的节点作为 Deque
class.
构造函数的一部分
public Deque() {
first = new Node();
last = new Node();
first.next = last;
last.prev = first;
}
因此,您的项目会添加到他们面前。当您打印它们时,它会打印您添加的那些,然后是第一个和最后一个,并且由于它们没有设置项目,因此它会打印 null
.
我写了一个方法,将一个项目添加到双向链表的前面。每次我调用该函数时,它都应该添加通过它的项目。该函数按预期工作,除了当我遍历双向链表并打印每个项目时,它总是在最后打印两次 null
。我的代码如下。
public Deque() {
first = new Node();
last = new Node();
first.next = last;
last.prev = first;
}
public void addFirst(E item) {
if (item.equals(null)) {
throw new NullPointerException();
} else {
if (first.equals(null) && last.equals(null)) {
first = new Node();
first.next.item = item;
first.next.next = null;
last = first;
} else {
Node node = new Node();
node.item = item;
node.next = first;
first = node;
}
}
N++;
}
public static void main(String[] args) {
Deque<Integer> lst = new Deque<Integer>(); // empty list
lst.addFirst(1);
lst.addFirst(5);
lst.addFirst(7);
lst.addFirst(9);
Iterator<Integer> it = lst.iterator(); // tests iterator method
while (it.hasNext()) {
Integer val = it.next();
System.out.println(val);
}
}
该代码打印:9, 5, 7, 1, null, null
。我不知道正在打印两个额外的空值。谁能告诉我如何修复我的代码,使其不会在最后打印两次 null
?
您正在创建两个名为 first
和 last
的节点作为 Deque
class.
public Deque() {
first = new Node();
last = new Node();
first.next = last;
last.prev = first;
}
因此,您的项目会添加到他们面前。当您打印它们时,它会打印您添加的那些,然后是第一个和最后一个,并且由于它们没有设置项目,因此它会打印 null
.