#java #linked-list
#java #связанный список
Вопрос:
Я пытаюсь создать связанный список, у меня есть рабочий метод insert, однако я не знаю, как установить head в начало списка.
public void insert(Object o) {
curr = new Link(o,curr);
if(ticker ==0){
head = curr;
tail = curr;
}
ticker ;
}
Это просто устанавливает head в конец списка, когда он должен быть впереди. Буду признателен за любую помощь. И если вам нужно что-нибудь еще, чтобы разобраться в этом, дайте мне знать.
Комментарии:
1. каков ваш ожидаемый результат?
2. Если я введу a, b, c в таком порядке, то head должен указывать на c, а tail — на a.
3. Вы заявляете, что у вас есть рабочий метод insert…
insert(0, newHeadObject)
4. Этот метод insert создаст список, однако он не установит мои head и tail должным образом
Ответ №1:
Я точно не знаю, что такое ваша ссылка, но я думаю, вам следует создать класс Node типа
class Node {
Object value;
Node next;
Node pre; // optional
}
И ваши head и tail будут экземпляром Node.
Комментарии:
1. Извините, да, у меня уже есть это, если вы хотите, я могу опубликовать этот код для вас, чтобы вы поняли, с чем я работаю.
Ответ №2:
Я думаю, ваша проблема заключается в конструкторе для Link
. На основе вашего результата новая ссылка сохраняет ссылку на старую ссылку; это происходит в обратном порядке, и, таким образом, ваш список создается в обратном порядке. Установите следующий узел аргумента Link для создаваемой ссылки, что-то вроде
public Link(Object value, Link previous) {
...
previous.nextLink = this;
...
}
Заголовок связанного списка относится к первому элементу, который был добавлен, а не к последнему, как вы указали в своем комментарии. Это всего лишь терминология.
Вам нужна else
ветвь в настройке вашего метода вставки tail = current
, чтобы у вас всегда была ссылка на конец списка. ( head
уже указывает на начало списка, и какой узел является заголовком, не изменится) Фактически, если вы сделаете это, вам даже не понадобится переменная, tail
поскольку current
она будет служить той же цели.
Комментарии:
1. Единственная проблема в том, что мой метод insert помещает список в порядке c, b, a. и заголовок указывает на a, когда я это делаю. Как мне реорганизовать список так, чтобы в нем были a, b, c, а заголовок по-прежнему указывал на начало?