Я работаю над программой, которая не использует встроенный в Java класс Linked List; Я строю его с нуля. Я преуспел во всем, кроме написания метода, который вставляет узел в определенную позицию связанного списка.
У меня есть метод, который устанавливает определенный узел как «текущий» узел. Так, например, у меня есть связанный список, который выглядит так: кошки --> собаки --> делать --> хорошо --> питомцы, а "текущий" равен 2; это означает, что «текущий» узел — это «собаки».
Отсюда, скажем, я хочу вставить новый узел в позицию «текущего», информационное поле которого читается как и. Если все сделано правильно, окончательный связанный список будет таким: кошки --> и --> собаки --> делают strong> --> хорошо --> домашние животные; «и» заменит «собаки» на позиции 2.
Итак, вот моя проблема: мой метод работает для вставки нового узла во вторую позицию, но что-то идет не так с привязкой вновь созданного узла к уже существующим узлам. Я не только вставляю свой новый узел в список, но также вставляю узел без информации перед «собаками». Пока мой код работает, вывод выглядит следующим образом: кошки --> и --> (пусто) --> собаки -- > заводить --> хорошо --> домашних животных.
Я на 99,9% уверен, что проблема заключается в (if current != null) части кода, я просто не могу понять, как это исправить.
Любые мысли о том, почему я вставляю пустой узел в дополнение к узлу, который я действительно хочу добавить?
public void insert () {
System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting.");
String theString;
theString = console.nextLine();
while (!theString.equals("end")){
newNode = new Node ();
newNode.info = theString;
newNode.next = null;
if (first == null){
first = newNode;
last = newNode;
} else if (current != null){
Node p = new Node (current.info, current.next);
current.info = newNode.info;
current.next = p;
}
else {
last.next = newNode;
last = newNode;
}
System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting.");
theString = console.nextLine();
}
}
ИЗМЕНИТЬ
Вся программа довольно длинная, но вот метод «setLine», который устанавливает текущий равным любой позиции, в которую пользователь хочет вставить свой узел. Он принимает параметр «int line», который получается через приглашение пользователя.
public Node setLine(int line) {
int index = 0;
current = first;
while (index < line) {
previous = current;
current = current.next;
index++;
}
return current;
}
console
,java.util.Scanner
? - person Daniel Fischer   schedule 07.11.2012