/ / Як видалити останній вузол на циклічно пов'язаному списку - java

Як видалити останній вузол на циклічному Пов'язаному списку - java

У мене виникла проблема з видаленням останнього вузла. він видалить 2-й і останній, а не останній.

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;

}

"перший" - це попередній вузол. Коли я це оголосив. Я вказав останній вузол на останнє ціле і перший вузол на четверте ціле. (у мене 5 цілих чисел). якщо вам потрібен весь мой код. будь ласка, просто запитайте. Дякую

Відповіді:

0 для відповіді № 1

Щоб видалити останній, нам знадобиться посилання набіля останнього вузла. Таким чином ми можемо просто зробити наступний останній вузол точкою першого і оновити останній вузол до цього поряд з останнім вузлом. Java-сміттєві збірки подбають про інше

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*/

}

Цей код не буде скомпілювати і буде викидати помилки в довжині списків 1, вам доведеться виконати деяку перевірку краю справи, але це має змусити вас розпочати

Причина, чому ми не можемо просто видалити останній вузол, нам потрібно зберегти кругову властивість списку