problem ze zrozumieniem usuwania elementów z listy

0

Dobry wszystkim.

Mam problem ze zrozuemieniem usuwania ostatniego elementu z listy. Problem banalny (podobno) ale byłbym wdzięczny jakby ktoś w sposób łopatoliczny mi to wyjaśnił (może w sposób graficzny jeśli da radę). Poniżej kod:


SinglyLinkedListNode previousToTail = head;

while(previousToTail.next != tail){

        previousToTail = previousToTail.next;
        tail = previousToTail;
        tail.next = null;

}

Dokładnie chodzi mi o o to w jaki sposób znajdywany jest przedostatni element kiedy idziemy od strony head.

Z góry dzięki

0

Normalnie? o_O lecisz od początku i w każdym kroku pamiętasz poprzednika.

0

Chcesz łatwo zrozumieć listy, to pożycz sobie sobie od maluchów kolejkę z wagonikami. Do wagoników wrzucisz sobie po jednym cukierku (najlepiej mieszanka, żeby się różniły) oraz potrzebujesz jeszcze dwóch żołnierzyków, którzy będą robili za kolejarzy. ;)
Wagoniki będą wtedy reprezentować węzły listy, cukierki dane do dodawania, przesuwania, usuwania itp., a kolejarze za referencje lub wskaźniki do bieżącego węzła (wagonika). Drugi kolejarz idący o jeden wagonik dalej może reprezentować zapasową zmienną.
W taki sposób łatwo sobie wykombinujesz wszystkie operacje na listach, a na koniec będziesz umiał kombinować je w pamięci.
Powodzenia w kolejnictwie. :)

ps. Lista cykliczna, to wszystkie wagony są połączone w kółko, a dwukierunkowa, to wtedy kiedy kolejarze mogą się cofać.
ps2. Zjadane cukierki dobrze się zapamiętuje. ;)

0

I jedna uwaga: przy iteratorach/foreach nie powinno modyfikować się listy przez którą iterujesz.
No chyba że iteracją znajdziesz element, zapiszesz w zmiennej referencję do niego, iteracje przerwiesz i wtedy usuniesz.

1
Visher napisał(a):

I jedna uwaga: przy iteratorach/foreach nie powinno modyfikować się listy przez którą iterujesz.

itertor.remove()

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