Since your N = list1.length()
index of first element from which we should start removing can be calculated as
/*
list1: 3, 4, 5, 6 (length=4)
list2: a, b, c, d, e, f (length=6)
^- element from which we start deleting, its index = 2 (6-4)
*/
int indexOfFirstElementToRemove = list2.size() - list1.size();
Note: we don't know if list1 will always be smaller than list2. If it is not then indexOfFirstElementToRemove
would be negative or 0. In such case we need to remove all elements from list2 so calling list2.clear()
is enough.
To remove elements while iterating we use Iterator or ListIterator (if available). To start iterating from specified index we can use
ListIterator<ElementType> iterator = listOfElements.listIterator(firstElementIndex);
So our final solution can look like:
List<Integer> list1 = Stream.of(2, 3, 4, 5).collect(Collectors.toList());
List<Integer> list2 = Stream.of(0, 1, 2, 3, 4, 5).collect(Collectors.toList());
int indexOfFirstElementToRemove = list2.size() - list1.size();
if (indexOfFirstElementToRemove > 0) {
ListIterator<Integer> iterator = list2.listIterator(indexOfFirstElementToRemove);
while (iterator.hasNext()) {
iterator.next();
iterator.remove();
}
} else {//indexOfFirstElementToRemove<=0 so we need to remove all elements from list2
list2.clear();
}
System.out.println(list2); //Output: [0, 1]