Итак, у меня есть метод, который удаляет дублированные элементы, используя Linked List, метод работает на удаление дублированных элементов с начала (обратный проход) и с конца (обратный проход), но не с середины (возврат не выполнен, если сработало должно вернуть пропуск)
здесь идет пример вывода:
Некоторые дубликаты (один конец): (D, E, C, D, C, C, B, A) - A -> (D, E, C, D, C, C, B)
Все "А" вычеркнуто: ПРОЙДЕНО
Другие не удалены: PASS
Некоторые дубликаты (в середине): (D, E, C, D, C, C, B, A) - C -> (D, E, D, C, B, A)
Все "C" удалены: FAIL *
Другие не удалены: FAIL *
Некоторые дубликаты (другой конец): (D, E, C, D, C, C, B, A) - D -> (E, C, C, C, B, A)
Все "D" удалены: PASS
Другие не удалены: PASS
вот метод, который я использую:
public void expunge(T anElement){
Node prev = null;
Node currNode = firstNode;
// boolean findDublicate = false;
while(currNode != null){
if(currNode.data.equals(anElement)){
//Found something to remove
numberOfEntries--;
if(prev == null){
firstNode = currNode.next;
} else {
prev.next = currNode.next;
}
if(prev == anElement){
currNode.next = prev.next;}
}
//Maintain loop invariant: prev is the node before curr.
if(currNode.next != firstNode){
prev = currNode;
}
currNode = currNode.next;
}
}