Mám problém s odstránením posledného uzla. odstráni druhú na poslednú namiesto poslednej.
public Node removeLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
Node temp = first.next;
if (last.next == last) {
first = null;
} else {
first.next = temp.next;
}
temp.next = null;
length--;
return temp;
}
"prvý" je predchádzajúci uzol. Keď som to vyhlásil. Ukázal som posledný uzol na posledné celé číslo a prvý uzol na štvrté celé číslo. (mám 5 celých čísel). ak potrebujete celý svoj kód. prosím, opýtajte sa. Vďaka
odpovede:
0 pre odpoveď č. 1Ak chcete odstrániť posledný, potrebujeme odkazvedľa posledného uzla. Týmto spôsobom môžeme jednoducho urobiť posledný uzol na prvý bod a aktualizovať posledný uzol na tento vedľa posledného uzla. Zbierka odpadkov Java sa postará o zvyšok
public Node removeLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
Node temp2 = first;
Node temp = first.next;
while(temp.next != null) {temp2 = temp; temp = temp.next;}
//now temp 2 should be pointing to the SECOND LAST node
temp2.next = first; //now the second last node points at the first
last = temp2; //our new last node
/*Take care of counters and returns here*/
}
Tento kód zvyknutý zostaviť a bude hádzať chyby na zoznam dĺžka 1, budete musieť urobiť nejaký okraj prípadu kontrolu, ale to by malo začať
Dôvod, prečo nemôžeme odstrániť posledný uzol, je, že musíme zachovať kruhovú vlastnosť zoznamu