Java 为什么我的双链表迭代器打印空值?
我编写了一个方法,将一个项目添加到双链接列表的前面。每次调用函数时,它都应该添加通过它的项。该函数按预期工作,除了当我遍历双链接列表并打印每个项目时,它总是在末尾打印两次Java 为什么我的双链表迭代器打印空值?,java,iterator,doubly-linked-list,Java,Iterator,Doubly Linked List,我编写了一个方法,将一个项目添加到双链接列表的前面。每次调用函数时,它都应该添加通过它的项。该函数按预期工作,除了当我遍历双链接列表并打印每个项目时,它总是在末尾打印两次null。我的代码如下 public Deque() { first = new Node(); last = new Node(); first.next = last; last.prev = first; } public void addFirs
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);
}
}
public-Deque(){
第一个=新节点();
last=新节点();
first.next=last;
last.prev=第一个;
}
公共无效添加优先(E项){
if(item.equals(null)){
抛出新的NullPointerException();
}否则{
if(first.equals(null)和last.equals(null)){
第一个=新节点();
first.next.item=项目;
first.next.next=null;
最后=第一;
}否则{
节点=新节点();
node.item=项目;
node.next=first;
第一个=节点;
}
}
N++;
}
公共静态void main(字符串[]args){
Deque lst=new Deque();//空列表
第一次(1);
第一次(5);
第一阶段(7);
第一阶段(9);
迭代器it=lst.Iterator();//测试迭代器方法
while(it.hasNext()){
整数val=it.next();
系统输出打印项次(val);
}
}
该代码打印:
9,5,7,1,null,null
。我无法确定正在打印两个额外的空值。有谁能告诉我如何修复代码,使其不会在最后打印两次null
?您正在创建两个名为first
和last
的节点,作为Deque
类构造函数的一部分
public Deque() {
first = new Node();
last = new Node();
first.next = last;
last.prev = first;
}
因此,您的物品会添加到它们前面。当你把它们打印出来时,它会先打印你添加的内容,然后再打印第一个和最后一个,因为它们没有项目集,所以它会打印
null
如果这确实是该代码的输出,那么就存在根本性的错误。查看数字打印时的顺序与添加方式(作为第一个)。首先,您从未在addFirst
中设置prev
。