双向链表 - 指定尾部

Doubly Linked List - appointing a tail

你好,我有一个没有实现的双向链表,我的问题是我不确定如何指定尾巴,因为 Element 的构造函数让我感到困惑,这是我的作业,所以它必须用那个构造函数完成。 到目前为止,我的方法 addFirst 完成了它的工作,但它没有尾部

我无法使用 getter 和 setter

谢谢

public class Element {
    private int value;
    private Element next;
    private Element previous;

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

public class Liste {

    private Element first;
    private Element last;

    void addFirst(int value) {
        if(this.first!=null) {
            this.first= new Element(value,this.first,null);
        }
        else {
            this.first= new Element(value,null,null);
        }

    }

您只需要检查 last 是否为空。这样,您第一次将某些内容放入列表时,它就是 firstlast。你也不需要在实例化新Element的时候检查first是否为null,系统会帮你填入null。

public class Element {
    private int value = 0;
    private Element next = null;
    private Element previous = null;

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

    public Element insertBefore(int value) {
        Element that = new Element(value, this, null);
        previous = that;
        return that;
    }
} 

public class Liste {
    private Element first;
    private Element last;

    void addFirst(int value) {
        if (first == null) {
            Element newElement = new Element(value, null, null);
            first = newElement;
            last = newElement;
        } else {
            first = first.insertBefore(value);
        }
    }
}

这是一个简单的 addElement 方法,我们首先检查一个空列表,否则我们遍历列表直到到达末尾。到达末尾后,我们将新元素添加到列表中并将其设置为前一个最后一个元素。最后我们将最后一个变量设置为我们刚刚添加到列表中的新元素。

void addElement(int val)
{
    if(first == null)
    {
        first = new Element(val, null, null);
        last = first;
    }
    else
    {
        Element ref = first;
        while(ref.next != null)
            ref = ref.next;

        ref.next = new Element(val, ref, null); //added to the end of the list
        last = ref.next; //set the last Element to the one we just created
    }
}