Это часть упражнения, которое мы выполнили в классе, я просто не могу понять ...
Необходимый метод - это метод insertBefore (объектные данные), в котором, когда пользователь выбирает этот метод, онпредложит ввести данные для вставки перед справочными данными (введенными пользователем)
Пример того, как он должен выполняться:
// assuming linked list has data 1,2,3 inserted already
Choose Method:
1)Insert Before
choice: 1 // input by user
====Insert Before====
Enter Reference data: 2 // input by user
Enter Data to be inserted: 5 // input by user
supposed output: 1,5,2,3
Вот мой код для этого упражнения: (Он находится внутри класса LinkList с переменными
protected int end;
protected Node start;
и внутреннего класса с именем Node)
private class Node
{
public char data;
public Node next;
public Node(char data)
{
this.data = data;
}
}
public void insertBef(char ref,char data)
{
Node temp = new Node(data);
Node current = start;
if(end!=0)
{
for(int i = 1; i<end; i++)
{
if(current == start)
{
Node newNode = start;
newNode.data = current.data;
newNode.next = temp;
current = current.next;
}
else if(current.data == ref)
{
Node newNode = current;
newNode.data = current.data;
newNode.next = temp;
current = current.next;
}
}
end++;
}
else
{
temp.next = start;
start = temp;
}
end++;
}
Но когда я запускаю свой код, он выдает 3,5
, а не 1,5,2,3
!Я не могу понять, где я мог ошибиться ...
Может кто-нибудь сказать мне, где ошибка, и объяснить, как я могу ее исправить?
Я понимаю, что можночтобы вставить перед ссылочным значением, вы должны:
- Создать новый узел для новых данных
- Создать временный узел для ссылочного значения и ссылки
- Сделатьссылка данных до того, как эталонное значение указывает на новый узел и заставляет ссылку нового узла указывать на временный узел
Я просто не могу понять, как реализовать это в Javaкод ...