@SuppressWarnings("unused") public class DVListe { /////////////////////////////////////////////////////////// private class Node { Node prev; Object obj; Node next; public Node(Node prev, Object obj, Node next) { this.prev = prev; this.obj = obj; this.next = next; } public Node() { this(null, null, null); } public void setPrev(Node prev) { this.prev = prev; } public Node getPrev() { return this.prev; } public void setElement(Object obj) { this.obj = obj; } public Object getElement() { return this.obj; } public void setNext(Node next) { this.next = next; } public Node getNext() { return this.next; } } /////////////////////////////////////////////////////////// private Node head = null; private Node tail = null; public DVListe() { this.head = new Node(); this.tail = new Node(this.head, null, null); this.head.setNext(this.tail); } public void addFirst(Object o) { Node n = new Node(this.head, o, this.head.getNext()); n.getNext().setPrev(n); this.head.setNext(n); } public void addLast(Object o) { Node n = new Node(this.tail.getPrev(), o, this.tail); n.getPrev().setNext(n); this.tail.setPrev(n); } public Object getFirst() { return this.head.getNext().getElement(); } public Object getLast() { return this.tail.getPrev().getElement(); } public void removeFirst() { this.head.setNext(this.head.getNext().getNext()); this.head.getNext().setPrev(this.head); } public void removeLast() { this.tail.setPrev(this.tail.getPrev().getPrev()); this.tail.getPrev().setNext(this.tail); } public void removeElement(int i) { if (i < 0 ) { return; } if (i == 0) { this.removeFirst(); return; } Node l = this.head; int j = 0; for (; j < i; j++) { if (l.getNext().getNext() == this.tail) { break; } l = l.getNext(); } if (j != i) { return; } else { l.setNext(l.getNext().getNext()); l.getNext().setPrev(l); } } public void addElement(int i, Object o) { if (i < 0 ) { return; } if (i == 0) { this.addFirst(o); return; } Node l = this.head; int j = 0; for (; j < i; j++) { if (l.getNext() == this.tail) { break; } l = l.getNext(); } if (j != i) { return; } else { Node n = new Node(l, o, l.getNext()); n.getNext().setPrev(n); l.setNext(n); } } public String toString() { Node l = this.head; String s = ""; while (l.getNext() != this.tail) { s += "[" + l.getNext().getElement().toString() + "] "; l = l.getNext(); } return s; } public static void main(String[] args) { DVListe L = new DVListe(); L.addFirst("3"); L.addFirst("2"); L.addFirst("1"); L.addLast ("4"); L.addLast ("5"); L.addLast ("6"); L.addLast ("7"); L.addLast ("8"); L.addLast ("9"); System.out.println("toString():\t\t" + L); System.out.println("getFirst():\t\t" + "[" + L.getFirst() + "]"); System.out.println("getLast():\t\t" + "[" + L.getLast () + "]"); L.removeFirst(); System.out.println("removeFirst():\t\t" + L); L.removeLast(); System.out.println("removeLast():\t\t" + L); L.removeElement(5); System.out.println("removeElement(5):\t" + L); L.removeElement(-1); System.out.println("removeElement(-1):\t" + L); L.removeElement(100); System.out.println("removeElement(100):\t" + L); L.addElement(5, "7"); System.out.println("addElement(5, \"7\"):\t" + L); L.addElement(-1, null); System.out.println("addElement(-1, null):\t" + L); L.addElement(100, null); System.out.println("addElement(100, null):\t" + L); } }