Como unir dos listas en otra lista JAVA


Tengo tres listas, L1 y L2 que son listas ordenadas, y L que es donde hay que unir L1 y L2 de manera ordenada de pequeño a mayor. No puedo usar el mítico metodo de new(Nodo), por lo que tengo que ir enlazando L1 y L2 a L y ir borrando de las listas L1 y L2 cuando ya esten en L. En caso de que L no este vacia hay que borrar su contenido.

Es decir, si tengo, L1 -> 1 3 6 7, L2 -> 2 4 5 9 y L -> 0 8, el resultado sera L -> 1 2 3 4 5 6 7 9.

El metodo se come lo que hay en la lista L y une en esa misma lista L1 y L2, dejando vacias L1 y L2.

Mi problema es que no consigo acertar con la implementación del metodo, os dejo lo que he implementado hasta ahora por si me podeis decir cual es el fallo o como tendría que hacer.

public class Lista {

    private Nodo first;
    private int size;

    private static class Nodo {
        private Nodo next;
        private int info;

        public Nodo(int datum) {
            this.info = datum;
        }
    }

    public boolean isEmpty() {
        return this.size == 0;
    }

    public int size() {
        return this.size;
    }

    public Lista(Scanner input) {

        this.first = null;
        this.size = 0;

        if (input.hasNext()) {
            this.first = new Nodo(input.nextInt());
            this.size++;

            Nodo current = first;
            while (input.hasNext()) {
                current.next = new Nodo(input.nextInt());
                this.size++;
                current = current.next;
            }
        }
    }

    public String toString() {
        StringBuilder sb = new StringBuilder("( ");
        Nodo current = this.first;
        while (current != null) {
            sb.append(current.info + " ");
            current = current.next;
        }
        sb.append(") (" + this.size + " elemento)");
        return sb.toString();
    }

    

public void comerUnir(Lista List1, Lista List2) {
    
        Nodo current1 = List1.first;
        Nodo current2 = List2.first;
        
        int kop1 = List1.size();
        int kop2 = List2.size();
        
        int tamaño = this.size();
        Nodo current = this.first;
            
        if(this.first == null) {
            
            if (current2.info > current1.info) {
                this.first = current1;
                current = this.first;
                current1 = current1.next;
                kop1--;
                tamaño++;
            }else {
                this.first = current2;
                current = this.first;
                current2 = current2.next;
                kop2--;
                tamaño++;
            }
        }else {
            
            while(kop2 != 0 || kop1 != 0) {
                
                if (kop1 == 0) {
                    current.next = current2;
                    current2 = current2.next;
                    current = current.next;
                    kop2--;
                    tamaño++;
                    
                }else if (kop2 == 0) {
                    current.next = current1;
                    current1 = current1.next;
                    current = current.next;
                    kop1--;
                    tamaño++;
                    
                }else {
                    if (current2.info > current1.info) {
                        current.next = current1;
                        current = current.next;
                        current1 = current1.next;
                        kop1--;
                        tamaño++;
                    }else {
                        current.next = current2;
                        current = current.next;
                        current2 = current.next;
                        kop2--;
                        tamaño++;
                    }
                }
            }
            this.size = tamaño;
        }
            
            
            
    }

public static void main(String() args) throws FileNotFoundException {
        
        Lista l1 = new Lista(new Scanner(new File("files/G1/lista3.txt")));
        Lista l2 = new Lista(new Scanner(new File("files/G1/lista4.txt")));
        Lista l = new Lista(new Scanner(new File("files/G1/lista1.txt")));

        System.out.printf("L lista: %s%n%n se come y une la lista L1: %s%n%n"
                + "y la lista L2 %s%n%n", l, l1, l2);
        l.comerUnir(l1, l2);
        System.out.printf("Resultado%n%nL = %s%n%nL1 = %s%n%nL2 = %s%n", l, l1, l2);
    }
}