He implementado una lista enlazada que cumple con estas características, SimplyLinkedList. Esta implementación difiere de una implementación estándar en dos métodos:
1. Permite añadir todos los elementos de una SimplyLinkedList a otra, en tiempo constante.
Código: Seleccionar todo
public void add(SimplyLinkedList<T> l){
Node n = last.next;
n.next = l.first.next;
l.first.next = null;
last.next = l.last.next;
l.last.next = first;
size += l.size;
l.size = 0;
}
Código: Seleccionar todo
public void peek(SimplyLinkedList<T> l){
Node n = l.first.next;
l.first.next = n.next;
n.next = null;
last.next.next = n;
last.next = n;
size++;
l.size--;
}
Restricciones: Se pueden añadir elementos al principio, y al final. Pero sólo se puede eliminar el primer elemento de la lista.
Adjunto el código completo, tanto el algoritmo Merge Sort como la clase SimplyLinkedList.