Lista dwukierunkowa - usuwanie

0

Mam metode usuń. Pierwszy, drugi i ostatni element usuwa poprawnie ale gdy chce usunąć coś ze środka to kasuje ostatni zamiast tego co powinien

public void usun(int numer)
{
    Element biezacy = poczatek;
    while(biezacy != null)
    {
        if(biezacy.auto.NR_SILNIKA == numer)
        {
            if(biezacy == poczatek)
            {
            poczatek = (biezacy.nastepny);
            rozmiarListy--;
            break;
            }
            else if(biezacy == koniec)
            {
                koniec = biezacy.poprzedni;
                rozmiarListy--;
                break;
            }
            else
            {
                biezacy.poprzedni.ustawNastepny(biezacy.nastepny);
                biezacy.nastepny.ustawPoprzedni(biezacy.poprzedni);
                rozmiarListy--;
                break;
            }
        }
        biezacy = biezacy.nastepny;
    }
}
1
public void usun(int numer)
  {
   for(Element biezacy=poczatek;biezacy!=null;biezacy=biezacy.nastepny)
     {
      if(biezacy.auto.NR_SILNIKA==numer)
        {
          if(biezacy.poprzedni==null) poczatek=biezacy.nastepny;
          else biezacy.poprzedni.nastepny=biezacy.nastepny;
          if(biezacy.nastepny==null) koniec=biezacy.poprzedni;
          else biezacy.nastepny.poprzedni=biezacy.poprzedni;
          --rozmiarListy;
          break;
        }
     }
  }
0

Musi być więc błąd w dodawaniu ale nie mogę go znaleźć. Pomoże ktoś?

public void dodaj()
{
    if(czyPusta())
    {
        Element nowy = new Element(dodajAuto());
        poczatek = nowy;
        koniec = nowy;
        rozmiarListy++;
    }
    else
    {
        Element nowy = new Element(dodajAuto());
        Element biezacy = poczatek;
        boolean wstaw = false;
        while (biezacy != null && wstaw == false)
        {
            if (nowy.auto.NR_SILNIKA > biezacy.auto.NR_SILNIKA)
            {
                biezacy = biezacy.nastepny;
            }
            else
            {
                if (biezacy == poczatek)
                {
                    nowy.ustawNastepny(biezacy);
                    biezacy.ustawPoprzedni(nowy);
                    poczatek = nowy;
                }
                else
                {
                    nowy.ustawNastepny(biezacy);
                    nowy.ustawPoprzedni(biezacy.poprzedni);
                    biezacy.poprzedni.ustawNastepny(nowy);
                    biezacy.ustawPoprzedni(nowy);
                }
                wstaw = true;
            }
            if(wstaw == false)
            {
                koniec.ustawNastepny(nowy);
                nowy.ustawPoprzedni(koniec);
                koniec = nowy;
            }
        }
        rozmiarListy++;
    }
}
1

Nie rozumiem.
Jak dodajesz element do pustej listy, to wartość pola nastepny jest chyba null, bo następnego elementu nie ma. Dodajesz drugi element z większym numerem silnika i przypisujesz biezacy = biezacy.nastepny = null. Tak ma być?

1

Masz talent do komplikowania sobie życia:

public void dodaj()
  {
   Element poprzedni=null,nastepny=poczatek,nowy=new Element(dodajAuto());
   while((nastepny!=null)&&(nastepny.auto.NR_SILNIKA<nowy.auto.NR_SILNIKA))
     {
      poprzedni=nastepny;
      nastepny=poprzedni.nastepny; 
     }
   nowy.ustawNastepny(nastepny);
   nowy.ustawPoprzedni(poprzedni);
   if(nastepny==null) koniec=nowy; else nastepny.ustawPoprzedni(nowy);
   if(poprzedni==null) poczatek=nowy; else poprzedni.ustawNastepny(nowy);
   ++rozmiarListy;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1