/ / Intersección recursiva no destructiva de dos listas enlazadas individualmente: java, recursión, intersección

Intersección recursiva no destructiva de dos listas enlazadas individualmente: java, recursión, intersección

Quiero tomar dos listas unidasLa función se llama desde uno) y crea una tercera lista enlazada individualmente que contiene todas las intersecciones entre los dos. Así que si p = [0,1,2,3] y q = [1,3,7,9] entonces out = [1,3], dejando intactas las listas antiguas.

Como pueden ver, tengo que declarar "out" en doslugares Pero si golpeo la declaración llamando a la función nuevamente, naturalmente borra lo que le escribí anteriormente. Realmente no puedo averiguar cómo evitarlo.

Las listas enlazadas individualmente se pueden generar con http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html . primero es mi cabecera.

public List intersection(List l) {
if(first.data == l.first.data) {
List lTail = new List(l.first.next);
List tail = new List(first.next);

List out = new List(new Node(first.data, null)); //Bad idea #1
// System.out.println(out);

return tail.intersection(lTail);
} else if (first.data > l.first.data && l.first.next != null) {
List lTail = new List(l.first.next);
return intersection(lTail);

} else if (first.data < l.first.data && first.next != null) {
List tail = new List(first.next);
return tail.intersection(l);
} else { //When both lists are at the end position
List out = new List(new Node(0, null)); // Bad idea #2
return out;
}
}

Respuestas

0 para la respuesta № 1
List<T> p = new LinkedList<T>();
p.add...
...
List<T> q = new LinkedList<T>();
q.add...
...
List<T> intersection = new LinkedList<T>(p);
intersection.retainAll(q);

Ahora intersection contiene solo elementos, que están en ambas listas, mientras que las listas permanecen intactas.