У меня есть очень тривиальная проблема, что должно быть просто изменением ссылок. Я прочитал несколько ответов, и некоторые показывают, как это сделать, заменяя данные, а некоторые дают расплывчатое объяснение концепции.
Вот метод, который, кажется, запускает меня по кругу. Когда я заменяю целевой узел на предыдущий узел, этот узел просто пропускается. Затем, когда я возвращаюсь к ссылке на следующий узел, я застреваю в вечном цикле. Мне нужно знать, нужен ли мне еще один узел, проходящий от головы, или я могу просто сослаться на новую ссылку. Я знаю, что упускаю что-то совершенно очевидное.
for (cursor = head; cursor != null; cursor = cursor.link) {
if (target == cursor.data) {
Target = cursor.link.getLink();
next = cursor.getLink();
prev = cursor;
System.out.println(prev.getData()); // for testing
System.out.println(next.getData());
prev.setLink(Target); // Swaps the first link
//Target.setLink(prev); // causes eternal loop
}}
return Target.getData();
}
Это мой метод тестирования, создание списка из 7 узлов и вывод на экран.
public static void main(String[] args) {
SLL LL = new SLL(18, null);
LL.add(4);
LL.add(14);
LL.add(8);
LL.add(12);
LL.add(2);
LL.add(28);
System.out.println(LL.toString());
System.out.println(LL.swap(12));
System.out.println(LL.toString());
}
Это результат, который я получаю:
{18, 28, 2, 12, 8, 14, 4}
12
8
14
{18, 28, 2, 12, 14, 4}
Желаемый результат:
{18, 28, 2, 12, 8, 14, 4}
{18, 28, 2, 8, 12, 14, 4}
SLL
иTarget
. Я вижу, что вы используетеcursor.link
иногда иcursor.getLink()
в другое время, так что непонятно конкретное поведение. - person lealceldeiro   schedule 12.07.2018