Cześć. Zrobiłem listę dwukierunkową i chciałem się zapytać, czy metody addFirst i addLast są dobrze napisane.

public class DoubleLinkedList<T> {
    class Node<T> {
        private T       value;
        private Node<T> next;
        private Node<T> previous;

        public Node() {
        }

        public T getValue() {
            return value;
        }

        public void setValue(T value) {
            this.value = value;
        }

        public Node<T> getNext() {
            return next;
        }

        public void setNext(Node<T> next) {
            this.next = next;
        }

        public Node<T> getPrevious() {
            return previous;
        }

        public void setPrevious(Node<T> previous) {
            this.previous = previous;
        }

    }

    private Node<T> head;
    private Node<T> tail;

    private int     size;

    public DoubleLinkedList() {
        head = new Node<>();
        tail = new Node<>();
        head.setNext(tail);
        tail.setPrevious(head);

    }

    public void addFirst(T val) {
        Node<T> node = new Node<>();
        node.setValue(val);

        node.setNext(head.getNext());
        node.setPrevious(head);
        head.getNext().setPrevious(node);
        head.setNext(node);
        size++;
    }

    public void addLast(T val) {
        Node<T> node = new Node<>();
        node.setValue(val);

        node.setPrevious(tail.getPrevious());
        node.setNext(tail);
        tail.getPrevious().setNext(node);
        tail.setPrevious(node);
        size++;
    }

    public void displayForward() {
        Node<T> node = head.getNext();
        while (node.getNext() != null) {
            System.out.print(node.getValue() + " ");
            node = node.getNext();
        }
    }

    public void displayBackward() {
        Node<T> node = tail.getPrevious();
        while (node.getPrevious() != null) {
            System.out.print(node.getValue() + " ");
            node = node.getPrevious();
        }
    }

    public static void main(String[] args) {
        DoubleLinkedList<Integer> dll = new DoubleLinkedList<>();
        dll.addFirst(1);
        dll.addFirst(2);
        dll.addLast(3);
        dll.displayForward();
        System.out.println();
        dll.displayBackward();
    }

}