Cześć,
mam do napisania metodę, która przyjmuje listę powiązaną oraz element "key", za zadanie ma usuwać wszystkie elementy o podanym kluczu.
Problem w tym, że metoda usuwa tylko 1 wartość, mimo że występują takie same elementy. Gdzie jest błąd?
Poniżej kod z metody main, metoda delete klasy Que, oraz cała klasa Que
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
Que<Integer> q = new Que<Integer>();
q.add(1);
q.add(9);
q.add(2);
q.add(1);
for(Integer n : q)
System.out.println(n);
remove(q,1);
System.out.println("--------------");
for(Integer n : q)
System.out.println(n);
}
public static int remove(Que a, Integer key)
{
Iterator iterator = a.iterator();
int counter = 0;
int i = 1;
while (iterator.hasNext())
{
if (iterator.next() == key)
{
counter++;
a.delete(i);
}
i++;
}
return counter;
}
}
Kod metody delete:
public Item delete (int k)
{
int c = 0;
if (k > N || k <= 0)
return null;
if (k == 1)
{
return this.deque();
}
Node actual = first;
Node before = null;
c++;
while (true)
{
if (c == k)
{
before.next = actual.next;
N--;
Item item = actual.item;
actual = null;
return item;
}
else
{
before = actual;
actual = actual.next;
c++;
}
}
}
Kod całej listy powiązanej:
import java.util.Iterator;
public class Que <Item> implements Iterable<Item>{
private Node first;
private Node last;
private int N;
private class Node
{
Item item;
Node next;
}
public Item delete (int k)
{
int c = 0;
if (k > N || k <= 0)
return null;
if (k == 1)
{
return this.deque();
}
Node actual = first;
Node before = null;
c++;
while (true)
{
if (c == k)
{
before.next = actual.next;
N--;
Item item = actual.item;
actual = null;
return item;
}
else
{
before = actual;
actual = actual.next;
c++;
}
}
}
public void add(Item item)
{
Node oldlast = last;
last = new Node();
last.item = item;
last.next = null;
if(N == 0)
first = last;
else
oldlast.next = last;
N++;
}
public Item deque()
{
Item item = first.item;
first = first.next;
if (N == 0)
last = null;
N--;
return item;
}
public Iterator<Item> iterator()
{return new QueIterator();}
private class QueIterator implements Iterator<Item>
{
private Node current = first;
public boolean hasNext()
{return current != null; }
public void remove() { }
public Item next()
{
Item item = current.item;
current = current.next;
return item;
}
}
}