Sprawdź się
Zapisz metody zwrocGlowa() i zwrocOgon, które zwrócą wartości zapisane odpowiednio w pierwszym i ostatnim elemencie listy niecyklicznej jednokierunkowej bez ich usuwania. Jeżeli lista jest pusta, metody powinny zwrócić minimalną wartość całkowitą.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 3, 5, 8.
Poprawny wynik działania programu:
Głowa: 3
Ogon: 8Wykorzystaj referencję glowa oraz pętlę przechodzącą listę do końca.
class Wezel {
int liczba;
Wezel nastepny;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
return;
}
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
pomocniczy.nastepny = nowy;
}
public int zwrocGlowa() {
if (glowa == null) return Integer.MIN_VALUE;
return glowa.liczba;
}
public int zwrocOgon() {
if (glowa == null) return Integer.MIN_VALUE;
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
return pomocniczy.liczba;
}
}
public class Cwiczenie1 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(3);
lista.dodaj(5);
lista.dodaj(8);
System.out.println("Głowa: " + lista.zwrocGlowa());
System.out.println("Ogon: " + lista.zwrocOgon());
}
}Zapisz metodę podajRozmiar(), która zwróci liczbę elementów zapisanych w liście niecyklicznej jednokierunkowej.
Działanie programu przetestuj dla listy jednokierunkowej, do której dodasz kolejno wartości 1, 2, 3.
Poprawny wynik działania programu:
Rozmiar: 3Wykorzystaj pomocniczą referencję oraz pętlę przechodzącą listę do końca.
class Wezel {
int liczba;
Wezel nastepny;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
return;
}
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
pomocniczy.nastepny = nowy;
}
public int podajRozmiar() {
Wezel pomocniczy = glowa;
int rozmiar = 0;
if (glowa == null) return 0;
while (pomocniczy != null) {
pomocniczy = pomocniczy.nastepny;
rozmiar++;
}
return rozmiar;
}
}
public class Cwiczenie2 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(1);
lista.dodaj(2);
lista.dodaj(3);
System.out.println("Rozmiar: " + lista.podajRozmiar());
}
}Zapisz metodę usunOstatni(), która usuwać będzie ostatni element listy niecyklicznej jednokierunkowej i zwróci zapisaną w nim wartość lub minimalną wartość całkowitą, jeżeli lista będzie pusta.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 1, 2, 3, a następnie usuniesz dwa ostatnio dodane elementy.
Poprawny wynik działania programu:
Lista: 1Wykorzystaj dwie referencje pomocnicze oraz pętlę przechodzącą listę do końca.
class Wezel {
int liczba;
Wezel nastepny;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
return;
}
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
pomocniczy.nastepny = nowy;
}
public void wypisz() {
if (glowa == null) {
System.out.println("Lista jest pusta");
return;
}
System.out.print("Lista: ");
Wezel pomocniczy = glowa;
while (pomocniczy != null) {
System.out.print(pomocniczy.liczba + " ");
pomocniczy = pomocniczy.nastepny;
}
System.out.println();
}
public int usunOstatni() {
Wezel pomocniczy1 = glowa, pomocniczy2 = null;
int liczba = Integer.MIN_VALUE;
if (glowa == null) return liczba;
if (pomocniczy1.nastepny == null) {
liczba = pomocniczy1.liczba;
glowa = null;
return liczba;
}
while (pomocniczy1.nastepny != null) {
pomocniczy2 = pomocniczy1;
pomocniczy1 = pomocniczy1.nastepny;
}
pomocniczy2.nastepny = null;
liczba = pomocniczy1.liczba;
return liczba;
}
}
public class Cwiczenie3 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(1);
lista.dodaj(2);
lista.dodaj(3);
lista.usunOstatni();
lista.usunOstatni();
lista.wypisz();
}
}Zapisz metodę odwroc(), która odwróci kolejność elementów listy niecyklicznej jednokierunkowej.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 3, 5, 8.
Poprawny wynik działania programu:
Lista: 8 5 3Wykorzystaj trzy referencje pomocnicze oraz pętlę przechodzącą listę do końca.
class Wezel {
int liczba;
Wezel nastepny;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
return;
}
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
pomocniczy.nastepny = nowy;
}
public void wypisz() {
System.out.print("Lista: ");
Wezel pomocniczy = glowa;
while (pomocniczy != null) {
System.out.print(pomocniczy.liczba + " ");
pomocniczy = pomocniczy.nastepny;
}
System.out.println();
}
public void odwroc() {
Wezel aktualny = glowa, poprzedni = null, nastepny = null;
while (aktualny != null) {
nastepny = aktualny.nastepny;
aktualny.nastepny = poprzedni;
poprzedni = aktualny;
aktualny = nastepny;
}
glowa = poprzedni;
}
}
public class Cwiczenie4 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(3);
lista.dodaj(5);
lista.dodaj(8);
lista.odwroc();
lista.wypisz();
}
}Zapisz metodę wypiszWstecz(), która wypisuje elementy listy niecyklicznej dwukierunkowej od końca.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 13, 8, 5.
Poprawny wynik działania programu:
Lista: 5 8 13Wykorzystaj referencje pomocniczy i ogon.
class Wezel {
int liczba;
Wezel nastepny;
Wezel poprzedni;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
this.poprzedni = null;
}
}
class Lista {
Wezel glowa;
Wezel ogon;
public Lista() {
glowa = ogon = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = ogon = nowy;
return;
}
ogon.nastepny = nowy;
nowy.poprzedni = ogon;
ogon = nowy;
}
public void wypiszWstecz() {
Wezel pomocniczy = ogon;
if (glowa == null) return;
System.out.print("Lista: ");
while (pomocniczy.poprzedni != null) {
System.out.print(pomocniczy.liczba + " ");
pomocniczy = pomocniczy.poprzedni;
}
System.out.println(pomocniczy.liczba);
}
}
public class Cwiczenie5 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(13);
lista.dodaj(8);
lista.dodaj(5);
lista.wypiszWstecz();
}
}Zapisz metodę wypiszRekursywnie(), która wypisze elementy listy jednokierunkowej w odwrotnej kolejności, tj. od ogona do głowy. W rozwiązaniu wykorzystaj rekurencję i wywołaj napisaną metodę w metodzie głównej.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 8, 13, 2.
Poprawny wynik działania programu:
21 13 8Do pierwszego wywołania metody wypiszRekursywnie() jako argument przekaż referencję na pierwszy element listy. Wywołania rekurencyjne wewnątrz metody powinny się zakończyć, jeżeli metoda jako argument otrzyma referencję pustą.
class Wezel {
int liczba;
Wezel nastepny;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
return;
}
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != null) {
pomocniczy = pomocniczy.nastepny;
}
pomocniczy.nastepny = nowy;
}
}
public class Cwiczenie6 {
public static void wypiszRekursywnie(Wezel wezel) {
if (wezel != null) {
wypiszRekursywnie(wezel.nastepny);
System.out.print(wezel.liczba + " ");
}
}
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(8);
lista.dodaj(13);
lista.dodaj(21);
wypiszRekursywnie(lista.glowa);
}
}Zapisz metodę wypiszOdWezla(wezel), która wypisuje elementy listy cyklicznej dwukierunkowej, zaczynając od węzła wskazywanego przez podaną referencję wezel. Jeśli metoda otrzyma jako argument referencję pustą (null), wypisywanie powinno rozpocząć się od pierwszego węzła listy.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 13, 21, 34.
Poprawny wynik działania programu:
Lista: 21 34 13Wykorzystaj węzeł pomocniczy i sprawdź, czy pole nastepny nie wskazuje na węzeł, od którego zaczynasz wypisywać listę.
class Wezel {
int liczba;
Wezel nastepny;
Wezel poprzedni;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
this.poprzedni = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
glowa.nastepny = glowa;
glowa.poprzedni = glowa;
return;
}
Wezel pomocniczy = glowa.poprzedni;
nowy.nastepny = glowa;
nowy.poprzedni = pomocniczy;
glowa.poprzedni = nowy;
pomocniczy.nastepny = nowy;
}
public void wypiszOdWezla(Wezel wezel) {
if (glowa == null) return;
System.out.print("Lista: ");
if (wezel == null) wezel = glowa;
Wezel pomocniczy = wezel;
while (pomocniczy.nastepny != wezel) {
System.out.print(pomocniczy.liczba + " ");
pomocniczy = pomocniczy.nastepny;
}
System.out.println(pomocniczy.liczba);
}
}
public class Cwiczenie7 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(13);
lista.dodaj(21);
lista.dodaj(34);
lista.wypiszOdWezla(lista.glowa.nastepny);
}
}Zapisz metodę usunWezel(wezel), która usuwa przekazany jako referencja węzeł z listy cyklicznej dwukierunkowej i zwraca wartość przechowywaną w tym węźle. W przypadku, gdy argumentem metody jest referencje pusta (null), metoda powinna usuwać pierwszy węzeł listy. Jeśli lista jest pusta, metoda powinna zwrócić minimalną wartość całkowitą reprezentowaną przez stałą Integer.MIN_VALUE.
Działanie programu przetestuj dla listy, do której dodasz kolejno wartości 13, 21, 34. Usuwanym węzłem powinien być węzeł znajdujący się bezpośrednio po głowie (jej następnik).
Poprawny wynik działania programu:
Lista: 13 34Odpowiednio ustaw referencje węzłów, na które ustawione są referencje węzła usuwanego.
class Wezel {
int liczba;
Wezel nastepny;
Wezel poprzedni;
Wezel(int liczba) {
this.liczba = liczba;
this.nastepny = null;
this.poprzedni = null;
}
}
class Lista {
Wezel glowa;
public Lista() {
glowa = null;
}
public void dodaj(int liczba) {
Wezel nowy = new Wezel(liczba);
if (glowa == null) {
glowa = nowy;
glowa.nastepny = glowa;
glowa.poprzedni = glowa;
return;
}
Wezel pomocniczy = glowa.poprzedni;
nowy.nastepny = glowa;
nowy.poprzedni = pomocniczy;
glowa.poprzedni = nowy;
pomocniczy.nastepny = nowy;
}
public void wypisz() {
if (glowa == null) return;
System.out.print("Lista: ");
Wezel pomocniczy = glowa;
while (pomocniczy.nastepny != glowa) {
System.out.print(pomocniczy.liczba + " ");
pomocniczy = pomocniczy.nastepny;
}
System.out.println(pomocniczy.liczba);
}
public int usunWezel(Wezel wezel) {
if (glowa == null) return Integer.MIN_VALUE;
if (wezel == null) wezel = glowa;
int liczba = wezel.liczba;
wezel.nastepny.poprzedni = wezel.poprzedni;
wezel.poprzedni.nastepny = wezel.nastepny;
if (wezel == glowa) {
if (glowa.nastepny != glowa) {
glowa = glowa.nastepny;
} else {
glowa = null;
}
}
return liczba;
}
}
public class Cwiczenie8 {
public static void main(String[] args) {
Lista lista = new Lista();
lista.dodaj(13);
lista.dodaj(21);
lista.dodaj(34);
lista.usunWezel(lista.glowa.nastepny);
lista.wypisz();
}
}