java - 双向链表方法的问题
问题描述
我一直在尝试创建(我一直在学习)一个基于练习的双向链表,其中该列表将与货车一起训练。练习要求创建一个具有“货车名称”、“下一辆货车”和“上一辆货车”属性的“货车”类,以及具有添加货车、打印货车和锯开顺序的方法的另一个类“火车”火车的机车。我的问题是练习如何要求创建添加货车的方法,以及交换机车顺序的方法。添加货车的方法有一个参数,其数据类型为“货车”类,我真的没有创建这个方法。我将在下面的代码中向您展示我已经完成的工作。有人可以帮我吗?我还没有理解如何使用参数“
除此之外,该练习要求创建两列火车(然后是两个列表),并更改两列火车的两个机车。我想知道这是否真的可以用两个双向链表来交换它们之间的两个元素,或者它是否可以简单地交换两个双向链表的顺序,而不必更改它们之间的元素?因为我已经对其进行了足够多的搜索,并且没有发现任何可以在两个双向链表之间交换元素的信息。尽管如此,我在创建交换火车机车的方法时遇到了一些问题,因为该方法具有数据类型“wagon”,但它具有参数“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){...}
}
这就是我尝试创建“火车”并在控制台中打印它的方式,但它没有奏效:
public class Main {
public static void main(String[] args) {
Trem trem = new Trem();
trem.adicionarVagao("qualquer");
trem.printTrem();
}
}
解决方案
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;
}
...
所以:要更改哪些引用字段。
推荐阅读
- r - 如何在 kmeans 聚类中提取变量重要性的方差分析表
- c# - 在 asp.net-core 中将模型的属性别名为不同的名称
- java - 将文件排序为自定义排序顺序
- visual-studio-2019 - 如何在 VS2019 中启用 .NET Core 3 预览版 SDK?
- java - FileWriter 未使用 URL 中的协议写入文件
- php - 拆分日期和时间,然后将它们转移到各自的新列
- php - fsockopen fgets 仅几秒钟然后关闭。不要等待完整的字节数。只需阅读几秒钟
- python - 使用 SHA256 哈希加密 JSON,得到 512 个字符而不是 64 个字符
- angular - 如何将 mat-calendar 与反应形式一起使用?
- javascript - 防止使用 svg 进行亚像素渲染