Я работаю над этим заданием лаборатории в течение нескольких часов и не могу понять, почему этот код не работает. Вопрос заключается в том, чтобы добавить метод int removeEvery(T item)
, который удаляет все вхождения элемента и возвращает количество удаленных элементов в класс списка ссылок, который реализует интерфейс списка ссылок.Удалить все вхождения товара из связанного списка
Это мой код: Он удаляет некоторые вхождения элемента, но не все из них.
public int removeEvery(T item){
int index = 0;
Node currentNode = firstNode;
for(int i = 1; i <= numberOfEntries; i++)
{
System.out.println(currentNode.getData());
if (item.equals(currentNode.getData())){
index++;
remove(i);}
else{
currentNode = currentNode.getNextNode();}
}
if(index != 0)
return index;
return -1;
}
Вот метод удалить, который был включен в класс LinkList:
public T remove(int givenPosition)
{
T result = null; // return value
if ((givenPosition >= 1) && (givenPosition <= numberOfEntries))
{
assert !isEmpty();
if (givenPosition == 1) // case 1: remove first entry
{
result = firstNode.getData(); // save entry to be removed
firstNode = firstNode.getNextNode();
if (numberOfEntries == 1)
lastNode = null; // solitary entry was removed
}
else // case 2: givenPosition > 1
{
Node nodeBefore = getNodeAt(givenPosition - 1);
Node nodeToRemove = nodeBefore.getNextNode();
Node nodeAfter = nodeToRemove.getNextNode();
nodeBefore.setNextNode(nodeAfter); // disconnect the node to be removed
result = nodeToRemove.getData(); // save entry to be removed
if (givenPosition == numberOfEntries)
lastNode = nodeBefore; // last node was removed
} // end if
numberOfEntries--;
} // end if
return result; // return removed entry, or
// null if operation fails
} // end remove
Отлично! Это работает. Раньше я пытался использовать предыдущую версию, но я никогда не работаю. Большое спасибо. –