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