Установка заголовка в связанном списке

#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, а заголовок по-прежнему указывал на начало?