Хорошо, я не делаю никаких предположений о том, что вы хотите, помимо того, что вы просили. Ниже приведена рекурсивная функция, которая находит общие элементы двух связанных списков. Это займет O (n ^ 2) времени, что то, что вы получаете с вашей настройкой.
Обратите внимание, что, хотя это хвостовая рекурсия, Java (как правило) не оптимизирует это, так что это приведет к перегрузке стека для длинных списков.
import java.util.*;
public class CommonNodeLinkedList {
public static void main(String[] args) {
List<Integer> list1_items = Arrays.asList(2, 5, 7, 10);
List<Integer> list2_items = Arrays.asList(2, 4, 8, 10);
LinkedList<Integer> list1 = new LinkedList<Integer>();
list1.addAll(list1_items);
LinkedList<Integer> list2 = new LinkedList<Integer>();
list2.addAll(list2_items);
System.out.println("List 1 : " + list1);
System.out.println("List 2 : " + list2);
System.out.println("Common Nodes: " + findCommonNodes(list1, list2));
}
public static LinkedList<Integer> findCommonNodes(LinkedList<Integer> list1,
LinkedList<Integer> list2) {
return findCommonNodes_helper(list1, list2, new LinkedList<Integer>());
}
public static LinkedList<Integer> findCommonNodes_helper(LinkedList<Integer> list1,
LinkedList<Integer> list2,
LinkedList<Integer> result) {
if (list1.isEmpty()) return result;
Integer head = list1.pop();
if (list2.contains(head)) {
result.add(head);
}
return findCommonNodes_helper(list1, list2, result);
}
}