双向链表方法的问题

Problem with methods of a doubly linked list

我一直在尝试创建(我一直在学习)一个基于练习的双向链表,其中该列表将用货车进行训练。练习要求创建一个具有属性 "name of wagon"、"next wagon" 和 "previous wagon" 的 class "wagon",以及另一个具有 class "train" 的 class "train"添加货车、打印货车和削减火车机车顺序的方法。我的问题在于练习如何要求创建添加货车的方法,以及交换机车顺序的方法。添加货车的方法有一个数据类型为 class "wagon" 的参数,我真的没有创建这个方法。我将在下面的代码中向您展示我已经完成的工作。有人可以帮我吗?我一直不明白如何在方法中使用参数"vagaoCriar"。

除此之外,练习要求创建两列火车(然后是两个列表),并更改两列火车的两个机车。我想知道两个双向链表是否真的有可能在它们之间交换它们的两个元素,或者是否可以简单地交换两个双向链表的顺序,而不必更改它们之间的元素?因为我已经搜索得够多了,我还没有发现任何说可以在两个双向链表之间交换元素的东西。不过,我在创建交换火车机车的方法时遇到了一些问题,因为该方法的数据类型为 "wagon",但它的参数为 "name of wagon"(字符串),名称为方法是 "get wagon and remove",所以我不知道练习的真正目的是什么。

我知道问题很长,但是对于这么复杂的例子(对我来说),我不能简明扼要。

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){...}
}

这就是我尝试创建 "train" 并在控制台中打印它的方式,但没有成功:

public class Main {

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

  trem.adicionarVagao("qualquer");

  trem.printTrem();
 }
}

headtail 本身并不是独立的货车。

所以一般不应该改变头部或尾部的字段。

最后添加:

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;
}
...

所以:引用 字段要更改。