class Node { Integer numNodes; Node first; Node last; Node next; Node prev; T value; Node(T value) { this.numNodes = 1; this.value = value; this.first = this; this.last = this; } void add(T... values) { for (T value: values) { Node newNode = new Node(value); newNode.prev = this.last; newNode.first = this.first; newNode.next = null; newNode.numNodes = this.first.numNodes; this.last.next = newNode; for (Node n = this.first; n != null; n = n.next) n.last = newNode; this.first.numNodes += 1; } } static float sum(Node node) { return ((Number) node.value).floatValue() + ((Number) (node.next != null ? node.sum(node.next) : 0)).floatValue(); } static float durchschnitt(Node node) { return node.sum(node.first)/node.numNodes; } } public class foo { static void test() { Node node; node = new Node(2.5f); node.add(3.5f, 1.6f, 3.6f, 1.3f, 3.0f); System.out.println(Node.sum(node.first)); System.out.println(Node.durchschnitt(node)); } }