#java #list #while-loop
Вопрос:
В настоящее время я создаю довольно стандартный подход к циклическому связанному списку и хочу изменить его. Если ему дано 3 узла Фиолетовый, Счастливый и Кролик, он должен вернуть Кролика -> Счастливый ->> Фиолетовый. Прямо сейчас, по какой-то причине, он печатает Happy — > Фиолетовый ->> Фиолетовый. Я думаю, что есть проблема с логикой в моем цикле do while, так как я довольно новичок в связанных списках.
Я не включал другие свои классы для определения функций узлов, так как они довольно длинные с другим не относящимся к делу кодом, и я знаю, что проблема не в этом (прямая печать работает нормально). Любые указатели приветствуются, и если что-то еще понадобится, дайте мне знать!
public void reverse() {
String result = " ";
Node current = head;
if (current != null) {
do {
current = current.prev;
result = current ", ";
} while (current != head);
} else {
result = "EMPTY";
}
System.out.println(result);
}
Комментарии:
1. Ваш код выглядит для меня нормально, но исходный список, похоже, не связан по кругу, как вы ожидаете. Мне кажется, что ваша голова ссылается не на первый элемент в вашем списке, а скорее на последний (
RABBIT
). И что ваша структураPURPLE
-> >HAPPY
-> >RABBIT
иPURPLE
ссылается на себя как на родителя, в то времяRABBIT
как у нее нет потомка. В основномPURPLE
<-PURPLE
<-> <->HAPPY
<-> <->RABBIT
->null
2. Хорошая мысль. После дальнейшего расследования я понял, что имею дело с круговым двусвязным списком, поэтому я предполагаю, что мне придется несколько изменить свой подход.
3. Я не вижу никаких проблем с вашим кодом. Проблема в том, с
head
чем вам следует выполнить печать передif (current != null)
отладкой. Скорее всего, это имеет значение,Rabbit
.
Ответ №1:
Используйте спускаемый генератор
LinkedList<String> list = new LinkedList<>();
list.add("Purple");
list.add("Happy");
list.add("Rabbit");
for (Iterator<String> iterator = list.descendingIterator(); iterator.hasNext(); ) {
String next = iterator.next();
System.out.println("next = " next);
}