用Java构建一个链表



这是我书中的一个例子。在我看来,当您用这个类创建一个列表时,您会创建两个对象(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;
    }
}

正如我所看到的,当你用这个类创建一个列表时,你会创建两个对象(第一个和最后一个,都是null)。

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

编写first = n; last = n;时,将firstlast设置为都引用同一对象—不管n指的是什么对象。

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

是的,它们都将引用同一个Node实例,其value为2。

是的,我认为需要第一个和最后一个。如果您有出列(先删除)或搜索(我想这可以从最后而不是从开始进行,对于简单的线性搜索来说,相同的过程),那么稍后的第一个可能会更有用。

至于你的问题。是的,如果您从一个空白列表开始,并说列表。add(2)。第一个和最后一个都将指向值为2的节点。这是因为列表中的第一个元素和最后一个元素相同,因此列表中有1个元素。它既是第一个也是最后一个(如果你想变得奇怪的话,也可以是中间的)。

但是如果你做了list.add(1),list.aadd(2)。你会得到第一个=node.value==1,第二个=node.value==2

相关内容

  • 没有找到相关文章

最新更新