为什么我的双向链表迭代器打印为空?

时间:2015-10-29 23:48:16

标签: java iterator doubly-linked-list

我写了一个方法,将一个项目添加到双向链表的前面。每次调用函数时,都应该添加通过它的项。该函数按预期工作,除了当我遍历双向链表并打印每个项目时,它总是在最后打印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两次?

1 个答案:

答案 0 :(得分:2)

您正在创建两个名为firstlast的节点,作为Deque类构造函数的一部分。

public Deque() {
    first = new Node();
    last = new Node();
    first.next = last;
    last.prev = first;  
}

因此,您的商品会在他们面前添加。当你打印出来时,会打印你添加的那些,然后是第一个和最后一个,因为它们没有设置项目,所以它会打印null