Løsningsforslag - oppgaver i Avsnitt 3.3.3


Oppgave 2

  @Override
  public int indeksTil(T verdi)
  {
    if (verdi == null) return -1;

    Node<T> p = hode;

    for (int indeks = 0; indeks < antall ; indeks++)
    {
      if (p.verdi.equals(verdi)) return indeks;
      p = p.neste;
    }
    return -1;
  }

  @Override
  public boolean inneholder(T verdi)
  {
    return indeksTil(verdi) != -1;
  }

Oppgave 3

  @Override
  public boolean fjern(T verdi)               // verdi skal fjernes
  {
    if (verdi == null) return false;          // ingen nullverdier i listen

    Node<T> q = hode, p = null;               // hjelpepekere

    while (q != null)                         // q skal finne verdien t
    {
      if (q.verdi.equals(verdi)) break;       // verdien funnet
      p = q; q = q.neste;                     // p er forgjengeren til q
    }

    if (q == null) return false;              // fant ikke verdi
    else if (q == hode) hode = hode.neste;    // går forbi q
    else p.neste = q.neste;                   // går forbi q

    if (q == hale) hale = p;                  // oppdaterer hale

    q.verdi = null;                           // nuller verdien til q
    q.neste = null;                           // nuller nestepeker

    antall--;                                 // en node mindre i listen

    return true;                              // vellykket fjerning
  }