/ Ako odstrániť posledný uzol na kruhovom jedinom prepojenom zozname - java

ako odstrániť posledný uzol v kruhovom jedinom prepojenom zozname - java

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ď č. 1

Ak 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