在Java中构建链表

时间:2012-01-19 18:39:38

标签: java list linked-list

这是我书中的一个例子。在我看来,当你用这个类创建一个列表时,你创建了两个对象(firstlast,它们都是null)。当你在add方法中放入第一个和最后一个“Node”对象时,我无法弄清楚为什么。设置first = nlast = n时,不应创建两个元素。例如,如果我致电list.add(2),那么firstlast现在不应该都是2吗?

public class List {

    private Node   first = null;
    private Node   last = null;

    public List(){
        first = null;
        last = null;

    }   

    private static class Node{

        public int   value;
        public Node   next;

        public Node ( int value, Node next){
            this.value = value;
            this.next = next;       
        }
    }   

    public void add (int value){
        Node   n = new Node (value,null);

        if(first==null){
            first = n;
            last = n;

        }else{
            last.next = n;
            last = n;
        }
    }

    public int size(){
        int   number = 0;
        Node   n = first;
        while(n != null){
            number++;
            n = n.next;
        }
        return number;
    }
}

2 个答案:

答案 0 :(得分:3)

  

正如我所看到的,当你用这个类创建一个列表时,你创建了两个对象(first和last,它们都是null)。

那不是真的。 firstlast不是对象,而是引用到对象。在这种情况下,它们以 null 引用开头,这意味着它们根本不引用任何对象。

当您编写first = n; last = n;时,您将firstlast设置为引用同一个对象 - 无论n指向哪个对象。

  

例如,如果list.add(2),现在不应该是第一个和最后一个是2?

是的,他们都会引用Nodevalue的{​​{1}}实例。

答案 1 :(得分:0)

是的,我看到第一个和最后一个是必需的。如果您已经出列(先删除)或搜索(我想可以从最后而不是在开始时进行,简单的线性搜索的相同过程),可能稍后会更有用。

至于你的问题。是,如果你开始使用空白列表并说list.add(2)。 first和last都将指向具有值2的节点。这是因为列表中的第一个元素和最后一个元素是相同的,因此列表中有1个元素。它的第一个和最后一个(如果你想变得奇怪,那就是中间)。

但如果你做了list.add(1),则列表.add(2)。你会得到first = node.value == 1和second = node.value == 2