Løsningsforslag - oppgaver i Avsnitt 3.3.4


Oppgave 1

  Liste<Integer> liste = new EnkeltLenketListe<>();
  for (int i = 1; i <= 10; i++) liste.leggInn(i);

  Iterator<Integer> iterator = liste.iterator();
  liste.fjern(0);   // fjerner verdi med indeks 0
  System.out.println(iterator.next());

Oppgave 2

  Liste<Integer> liste = new EnkeltLenketListe<>();
  for (int i = 1; i <= 10; i++) liste.leggInn(i);
  System.out.println(liste);

  // fjerner partallene
  liste.fjernHvis(x -> x % 2 == 0);

  // skriver ut
  liste.forEach(x -> System.out.print(x + " "));

Oppgave 3

  public boolean fjernHvis(Predicate<? super T> predikat)
  {
    Objects.requireNonNull(predikat, "null-predikat!");

    Node<T> p = hode, q = null;
    int antallFjernet = 0;

    while (p != null)
    {
      if (predikat.test(p.verdi))
      {
        antallFjernet++;
        endringer++;

        if (p == hode)
        {
          if (p == hale) hale = null;
          hode = hode.neste;
        }
        else if (p == hale) q.neste = null;
        else q.neste = p.neste;
      }
      q = p;
      p = p.neste;
    }

    antall -= antallFjernet;

    return antallFjernet > 0;
  }

Oppgave 4

  public void forEach(Consumer<? super T> handling)
  {
    Objects.requireNonNull(handling, "handling er null!");

    Node<T> p = hode;
    while (p != null)
    {
      handling.accept(p.verdi);
      p = p.neste;
    }
  }

Oppgave 5

  public void forEachRemaining(Consumer<? super T> handling)
  {
    Objects.requireNonNull(handling, "handling er null!");
    while (p != null)
    {
      handling.accept(p.verdi);
      p = p.neste;
    }
  }