Nadesłany przez Dominik Goździuk, 12 października 2011 21:14
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Lista.java:
//Lista dwustronna dwukierunkowa //(c) Dominik Goździuk //www.algorytm.org class Wezel { private String napis; private Wezel nastepny; private Wezel poprzedni; public Wezel() { nastepny = null; poprzedni = null; } public Wezel(String napis, Wezel nastepny, Wezel poprzedni) { this.napis = napis; this.nastepny = nastepny; this.poprzedni = poprzedni; } public String pobierzNapis() { return napis; } public Wezel pobierzNastepny() { return nastepny; } public void ustawNastepny(Wezel nastepny) { this.nastepny = nastepny; } public Wezel pobierzPoprzedni() { return poprzedni; } public void ustawPoprzedni(Wezel poprzedni) { this.poprzedni = poprzedni; } } class ListaDD { private Wezel poczatek; private Wezel koniec; public ListaDD() { poczatek = null; koniec = null; } public void wstaw(String napis) { Wezel wezel = new Wezel(napis, null, null); if (czyPusta()) { poczatek = wezel; koniec = wezel; } else { Wezel pomoc = poczatek; while (pomoc != null) { if ((pomoc.pobierzNapis()).compareToIgnoreCase(napis) < 0) { pomoc = pomoc.pobierzNastepny(); } else { if (pomoc == poczatek) { wezel.ustawNastepny(pomoc); pomoc.ustawPoprzedni(wezel); poczatek = wezel; break; } else { wezel.ustawNastepny(pomoc); wezel.ustawPoprzedni(pomoc.pobierzPoprzedni()); (pomoc.pobierzPoprzedni()).ustawNastepny(wezel); pomoc.ustawPoprzedni(wezel); break; } } } if (pomoc == null) { koniec.ustawNastepny(wezel); wezel.ustawPoprzedni(koniec); koniec = wezel; } } } public void usun(String napis) { Wezel pomoc = poczatek; while (pomoc != null) { if (pomoc.pobierzNapis() == napis) { if (pomoc == poczatek) { poczatek = (pomoc.pobierzNastepny()); break; } else if (pomoc == koniec) { koniec = (pomoc.pobierzPoprzedni()); break; } else { (pomoc.pobierzPoprzedni()).ustawNastepny(pomoc.pobierzNastepny()); (pomoc.pobierzNastepny()).ustawPoprzedni(pomoc.pobierzPoprzedni()); break; } } pomoc = pomoc.pobierzNastepny(); } if (pomoc == null) { System.out.println(); System.out.println("Wyraz " + napis + " nie znajduje sie na liście"); } } public boolean czyPusta() { return (poczatek == null); } public void wyswietlOdPoczatku() { Wezel pomoc = poczatek; System.out.println("Lista ułożona alfabetycznie od początku: "); while (pomoc != null) { System.out.print(pomoc.pobierzNapis() + " "); pomoc = pomoc.pobierzNastepny(); } } public void wyswietlOdKonca() { Wezel pomoc = koniec; System.out.println("Lista ułożona alfabetycznie od końca: "); while (pomoc != null) { System.out.print(pomoc.pobierzNapis() + " "); pomoc = pomoc.pobierzPoprzedni(); } } public void rozmiar() { Wezel pomoc = poczatek; int i = 0; while (pomoc != null) { i++; pomoc = pomoc.pobierzNastepny(); } System.out.println("Rozmiar listy: " + i); } } public class Lista { public static void main(String[] args) { ListaDD lista = new ListaDD(); lista.wstaw("Metallica"); lista.wstaw("Judas Priest"); lista.wstaw("AC/DC"); lista.wstaw("Iron Maiden"); lista.wstaw("Black Sabbath"); lista.wstaw("Nirvana"); lista.rozmiar(); lista.wyswietlOdPoczatku(); lista.usun("Depeche Mode"); lista.wyswietlOdKonca(); } }