Проблема с методами двусвязного списка - PullRequest
0 голосов
/ 12 апреля 2019

Я пытался создать (я изучал это) двусвязный список, основанный на упражнении, в котором список будет тренироваться с вагонами. В упражнении предлагается создать класс «вагон» с атрибутами «имя вагона», «следующий вагон» и «предыдущий вагон», а другой класс «поезд» с методами добавления вагонов, печати вагонов и сортировки порядка локомотивы поездов. Моя проблема в том, как в упражнении предлагается создать метод добавления вагонов, а другой - обменять порядок локомотивов. Метод добавления вагонов имеет параметр, который имеет в качестве типа данных класс «вагон», и я действительно не получил создать этот метод. Я собираюсь показать вам, что я уже сделал в коде ниже. Может ли кто-нибудь помочь мне с этим? Я не понял, как использовать параметр "vagaoCriar" в методе.

Кроме того, в упражнении предлагается создать два поезда (затем два списка) и заменить два локомотива двух поездов. Я хотел бы знать, возможно ли это с двумя двусвязными списками, чтобы поменять местами два их элемента, или это может быть просто замена порядка двух двусвязных списков без необходимости менять элементы между ними? Потому что я уже достаточно обыскал его и не нашел ничего, что говорило о том, что можно поменять местами элементы между двумя двусвязными списками. Тем не менее, у меня возникла некоторая проблема при создании метода для замены локомотивов поезда, потому что метод имеет тип данных «вагон», но имеет параметр «имя вагона» (String) и имя метода это «возьми вагон и убери», поэтому я понятия не имею, чего на самом деле хочет это упражнение.

Я понимаю, что вопросы длинные, но для такого сложного примера (для меня) я не смогу быть кратким.

public class Vagao {
  String nomeDoVagao;
  Wagon vagaoAnterior;
  Wagon vagaoPosterior;

public Vagao (String nomeDoVagao){
  this.nomeDoVagao = nomeDoVagao;
  vagaoAnterior = null;
  vagaoPosterior = null;
 }
}

public class Trem {
  Vagao head, tail = null;

//I do not know to proceed here
public void adicionarVagao (Vagao vagaoCriar){
  Vagao novo_Vagao = new Vagao (vagaoCriar.nomeDoVagão);

  if (head == null){
    head = tail = novo_Vagao;
    head.vagaoAnterior = null;
    tail.vagaoPosterior = null;
} else {
    tail.vagaoPosterior = novo_Vagao;
    novo_Vagao.vagaoAnterior = tail;
    tail = novo_Vagao;
    tail.vagaoPosterior = null;
  }
 }

//This is the other method, that I have not understood well, so I have not 
even begun it

public Vagao pegarVagaoRemover (String nomeDoVagao){...}
}

Вот как я пытался создать «поезд» и распечатать его в консоли, но он не сработал:

public class Main {

public static void main(String[] args) {
  Trem trem = new Trem();

  trem.adicionarVagao("qualquer");

  trem.printTrem();
 }
}

1 Ответ

0 голосов
/ 12 апреля 2019

head и tail не являются самостоятельными вагонами.

Поэтому не следует изменять поля головы или хвоста вообще.

Добавление в конце:

novo_Vagao.vagaoAnterior = null;
novo_Vagao.vagaoPosterior = null;
if (head == null){
    head = tail = novo_Vagao;
} else {
    novo_Vagao.vagaoAnterior = tail;
    tail.vagaoPosterior = novo_Vago;
    tail = novo_Vagao;
}

Удаление будет идти:

if (vagao.vagaoPosterio == null) {
    tail = vagao.vagaoAnterior;
} else {
    vagao.vagaoPosterio.vagaoAnterio = vagao.vagaoAnterior;
}
...

Итак: что ссылается на поля для изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...