Я вполне уверен, что этот метод неправильный:
int remove(Item item) {
Node cur = this.first;
while (cur !=null) {
if (cur.item.equals(item)) {
item = dequeue();
}
cur = cur.next;
N++;
}
return 0;
}
Ваш метод dequeue
появляется в начале списка.Но элемент, который вы удаляете, может и не быть в начале списка.
Я не искал больше проблем.
Это стандартный материал связанного списка.Некоторые из ваших учебников должны иметь алгоритмы для этого.Но в основном вам нужно отслеживать последний указатель, который вы использовали.Допустим, у вас есть lastPtr
и currentPtr
, и вы определяете, что currentPtr
нужно уйти.
Тогда lastPtr.next = currentPtr.next
Более интересно, если вы во главе.Вы должны признать это и вместо этого сделать first.next = currentPtr.next
.